javascript 圖片下載

情景:

oss上面存儲(chǔ)的圖片鹅龄,如果設(shè)置了 Content-Disposition 為 attachment驴娃,那么訪問圖片的時(shí)候是直接下載的花竞;否則,訪問是預(yù)覽形式揉燃;

解決:
  1. 到oss客戶端設(shè)置Content-Disposition扫尺,
  2. 后端設(shè)置 Content-Disposition,
  3. 前端實(shí)現(xiàn)你雌,代碼如下:
疑問:
  1. 設(shè)置了download屬性為什么還要blobUrl器联?【有知道的幫忙解答下】
  2. URL.createObjectURL和URL.revokeObjectURL是干什么的?【最后有解答】
  3. 生成的alink.href為什么不能在地址欄輸入直接訪問婿崭?【最后有解答】
  4. ie瀏覽器 navigator.msSaveBlob 是干什么的拨拓?【最后有解答】
  5. 為什么要appendChild 和 remove ?【最后有解答】
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        let url  = "http://mybg.oss-cn-hangzhou.aliyuncs.com/2019031510452423"
        const fileName = '2019031510452423.png'
        let xhr = new XMLHttpRequest();
        xhr.open("get", url, true); // true 表示異步
        xhr.responseType = "blob";
        xhr.onload = function (res) {
            if (this.status == 200) {
                var blob = this.response;
                if ('download' in document.createElement('a')) { // 非IE下載
                    const alink = document.createElement('a')
                    alink.download = fileName
                    alink.style.display = 'none'
                    alink.href = URL.createObjectURL(blob) // 將blob數(shù)據(jù)轉(zhuǎn)換成BlobUrl
                    document.body.appendChild(alink)
                    alink.click()
                    URL.revokeObjectURL(alink.href) // 釋放URL 對象
                    document.body.removeChild(alink)
                } else { // IE10+下載
                    navigator.msSaveBlob(blob, fileName)
                }
            }
        }
        xhr.send();
    </script>
</body>

</html>
URL.createObjectURL和URL.revokeObjectURL是干什么的氓栈?

URL.createObjectURL() 靜態(tài)方法會(huì)創(chuàng)建一個(gè) DOMString渣磷,其中包含一個(gè)表示參數(shù)中給出的對象的URL。這個(gè)新的URL 對象表示指定的 File 對象或 Blob 對象授瘦。

在每次調(diào)用 createObjectURL() 方法時(shí)醋界,都會(huì)創(chuàng)建一個(gè)新的 URL 對象,即使你已經(jīng)用相同的對象作為參數(shù)創(chuàng)建過提完。當(dāng)不再需要這些 URL 對象時(shí)形纺,每個(gè)對象必須通過調(diào)用 URL.revokeObjectURL() 方法來釋放。
瀏覽器在 document 卸載的時(shí)候徒欣,會(huì)自動(dòng)釋放它們逐样,但是為了獲得最佳性能和內(nèi)存使用狀況,你應(yīng)該在安全的時(shí)機(jī)主動(dòng)釋放掉它們打肝。

生成的alink.href為什么不能在地址欄輸入直接訪問脂新?

這個(gè) URL 的生命周期和創(chuàng)建它的窗口中的 document 綁定。

ie瀏覽器 navigator.msSaveBlob 是干什么的粗梭?

存儲(chǔ)blob或file的方法争便,非標(biāo)準(zhǔn),不推薦断医,僅出于兼容目的保留

The Navigator.msSaveBlob() method saves the File or Blob to disk.

Non-standard
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

Deprecated
This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible; see the compatibility table at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time.

為什么要appendChild 和 remove 滞乙?

代碼中對創(chuàng)建的<a> 進(jìn)行的 appendChild 和 remove 操作主要是為了兼容 FireFox 瀏覽器奏纪,在 FireFox 瀏覽器下調(diào)用該方法如果不將創(chuàng)建的<a>標(biāo)簽添加到 body 里,點(diǎn)擊鏈接不會(huì)有任何反應(yīng)酷宵,無法觸發(fā)下載亥贸,而在 Chrome 瀏覽器中則不受此影響。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浇垦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子荣挨,更是在濱河造成了極大的恐慌男韧,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件默垄,死亡現(xiàn)場離奇詭異此虑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)口锭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門朦前,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鹃操,你說我怎么就攤上這事韭寸。” “怎么了荆隘?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵恩伺,是天一觀的道長。 經(jīng)常有香客問我椰拒,道長晶渠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任燃观,我火速辦了婚禮褒脯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缆毁。我一直安慰自己番川,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布积锅。 她就那樣靜靜地躺著爽彤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缚陷。 梳的紋絲不亂的頭發(fā)上适篙,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機(jī)與錄音箫爷,去河邊找鬼嚷节。 笑死聂儒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硫痰。 我是一名探鬼主播衩婚,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼效斑!你這毒婦竟也來了非春?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤缓屠,失蹤者是張志新(化名)和其女友劉穎奇昙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敌完,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡储耐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滨溉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片什湘。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晦攒,靈堂內(nèi)的尸體忽然破棺而出闽撤,到底是詐尸還是另有隱情,我是刑警寧澤勤家,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布腹尖,位于F島的核電站,受9級特大地震影響伐脖,放射性物質(zhì)發(fā)生泄漏热幔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一讼庇、第九天 我趴在偏房一處隱蔽的房頂上張望绎巨。 院中可真熱鬧,春花似錦蠕啄、人聲如沸场勤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽和媳。三九已至,卻和暖如春哈街,著一層夾襖步出監(jiān)牢的瞬間留瞳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工骚秦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留她倘,地道東北人璧微。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像硬梁,于是被迫代替她去往敵國和親前硫。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

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