a標(biāo)簽可跨域下載圖片文件


文檔參考:
https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/a
此處兩種方法便是使用data:URL (base64格式) 和 blob:URL (文件流格式)實現(xiàn)跨域下載
data: URL方式:

downloadByData (url) {
  let image = new Image()  //創(chuàng)建圖片對象
  image.setAttribute('crossOrigin', 'anonymous') //設(shè)置允許跨域
  image.src = url //賦值src
  image.onload = () => {
    //等待圖片加載完成創(chuàng)建canvas
    let canvas = document.createElement('canvas')
    //將圖片繪制到canvas畫布上
    canvas.width = image.width
    canvas.height = image.height
    let ctx = canvas.getContext('2d')
    ctx.drawImage(image, 0, 0, image.width, image.height)
    //獲取圖片文件格式  jpg/jpeg/png
    let ext = image.src.substring(image.src.lastIndexOf('.')+1).toLowerCase()
    //導(dǎo)出畫布快照  此時已越過跨域限制成功取到圖片數(shù)據(jù)
    let dataURL = canvas.toDataURL('image/' + ext)
    //創(chuàng)建a標(biāo)簽
    const a = document.createElement("a");
    // 賦值a標(biāo)簽download屬性值玫锋,標(biāo)明該a標(biāo)簽提供下載功能撩鹿,同時該屬性指定了下載時的文件名稱
    a.download = this.downloadName;
    //賦值a標(biāo)簽下載地址,即canvas導(dǎo)出的畫布快照 base64格式的圖片地址
    a.href = dataURL;
    //添加a標(biāo)簽到dom中
    document.body.appendChild(a);
    //觸發(fā)a標(biāo)簽點擊事件 觸發(fā)下載
    a.click();
    //下載完成 刪除多余的a標(biāo)簽  保持頁面原有元素不動
    document.removeChild(a);
  }
},

blob: URL方式:

downloadByBlob (url) {
  let image = new Image()  //創(chuàng)建圖片對象
  image.setAttribute('crossOrigin', 'anonymous') //設(shè)置允許跨域
  image.src = url //賦值src
  image.onload = () => {
    //等待圖片加載完成創(chuàng)建canvas
    let canvas = document.createElement('canvas')
    //將圖片繪制到canvas畫布上
    canvas.width = image.width
    canvas.height = image.height
    let ctx = canvas.getContext('2d')
    ctx.drawImage(image, 0, 0, image.width, image.height)
    //此處同樣是利用canvas自帶API將畫布數(shù)據(jù)導(dǎo)出為bolb流格式
    canvas.toBlob((blob) => {
      let url = URL.createObjectURL(blob)
      const a = document.createElement("a");
      a.download = this.downloadName;
      // 直接將canvas導(dǎo)出的bolb:URL 格式賦值為a標(biāo)簽的href屬性 同樣進(jìn)行點擊觸發(fā)下載
      a.href = url;
      document.body.appendChild(a);
      a.click();
      document.removeChild(a);
      // 釋放URL對象
      URL.revokeObjectURL(url)
    })
  }
},
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末键思,一起剝皮案震驚了整個濱河市吼鳞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赖条,老刑警劉巖纬乍,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仿贬,死亡現(xiàn)場離奇詭異墓贿,居然都是意外死亡聋袋,警方通過查閱死者的電腦和手機队伟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幽勒,“玉大人嗜侮,你說我怎么就攤上這事∩度荩” “怎么了锈颗?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咪惠。 經(jīng)常有香客問我击吱,道長,這世上最難降的妖魔是什么遥昧? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任覆醇,我火速辦了婚禮,結(jié)果婚禮上渠鸽,老公的妹妹穿的比我還像新娘。我一直安慰自己凿试,他們只是感情好板甘,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般猫妙。 火紅的嫁衣襯著肌膚如雪割坠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼篓吁。 笑死,一個胖子當(dāng)著我的面吹牛盛嘿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芥炭,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼彪薛,長吁一口氣:“原來是場噩夢啊……” “哼善延!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起训挡,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颊艳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體重斑,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡漾脂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年啊终,在試婚紗的時候發(fā)現(xiàn)自己被綠了泰讽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佛玄。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡奥吩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出端衰,到底是詐尸還是另有隱情,我是刑警寧澤抵代,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布参淫,位于F島的核電站,受9級特大地震影響耍铜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜靶衍,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一商叹、第九天 我趴在偏房一處隱蔽的房頂上張望辜妓。 院中可真熱鬧孽惰,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辛掠。三九已至猩谊,卻和暖如春暗甥,著一層夾襖步出監(jiān)牢的瞬間寄月,已是汗流浹背初橘。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工耕蝉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留场躯,地道東北人踢关。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子魂仍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容