前端附件下載遇到的問(wèn)題和解決方法

前端附件下載時(shí)可能會(huì)遇到一下情況:

  • 微信小程序內(nèi)(已添加過(guò)白名單)。iOS手機(jī)可以正常下載,并保存到相冊(cè)。但是安卓手機(jī)只能下載,不能保存到相冊(cè)。

  • H5網(wǎng)頁(yè)附件下載功能,在所有的瀏覽器都能正常下載,但是在個(gè)別瀏覽器下載失敗(如小米瀏覽器附件下載會(huì)一直提示失敗)

  • 附件下載功能變成了瀏覽功能

關(guān)于前端附件下載需要了解兩個(gè)屬性:

1、Content-disposition

Content-disposition決定了附件的展示類型:

  • attachment:表示以附件方式下載,這種情況會(huì)彈出對(duì)話框提示用戶下載。

  • inline:表示在頁(yè)面中打開

設(shè)置方式可以在header中,也可以拼接到附件地址后面。兩個(gè)類型后都可以添加參數(shù)filename,只不過(guò)在inline情況下,無(wú)任何意義。

1.1、設(shè)置下載后內(nèi)容的文件名

如果需要修改下載后附件的文件名,需要在attachment的基礎(chǔ)上,再添加上filename。類似:

Content-Disposition: attachment; filename="filename.jpg"

這樣下載彈窗的提示內(nèi)容就是filename的內(nèi)容。

若不設(shè)置filename,會(huì)顯示附件的原始文件名。這里需要注意的是:filename中不要帶有空格,否則部分瀏覽器會(huì)不識(shí)別,提示失敗

個(gè)人遇到的情況是:filename中存在空格,導(dǎo)致小米自帶瀏覽器附件下載失敗。其它瀏覽器暫沒有發(fā)現(xiàn)這種問(wèn)題。

2、Content-type

Content-type代表了實(shí)體數(shù)據(jù)的數(shù)據(jù)類型,決定了下載后內(nèi)容的后綴名,因此每一個(gè)附件都會(huì)有一個(gè)Content-type值。

若無(wú)特殊需求,Content-type不需要額外的設(shè)置。

如果不小心或者某種原因,在附件地址后面,又額外設(shè)置了這個(gè)參數(shù)。需要檢查自己設(shè)置的類型和原先服務(wù)器默認(rèn)的類型是否一致,否則在某些機(jī)型或?yàn)g覽器可能無(wú)法保存到相冊(cè)。

關(guān)于Content-type的所有類型,可以查看百度百科,這里我挑了幾個(gè)常見的類型,以及對(duì)應(yīng)的文件后綴。

".*"="application/octet-stream"  //個(gè)人遇到的情況為“.bin”
".doc"="application/msword"
".gif"="image/gif"
".jpeg"="image/jpeg"
".jpg"="image/jpeg"
".jpg"="application/x-jpg"
".mp1"="audio/mp1"
".mp2"="audio/mp2"
".mp2v"="video/mpeg"
".mp3"="audio/mp3"
".mp4"="video/mp4"
".pdf"="application/pdf"
".png"="image/png"
".png"="application/x-png"
".ppt"="applications-powerpoint"
".ppt"="application/x-ppt"

這里說(shuō)一下application/octet-stream,雖然所有附件都可以使用這個(gè)類型,但是他只能實(shí)現(xiàn)簡(jiǎn)單下載功能,如果需要保存到相冊(cè)、文件中,最好還是設(shè)置附件具體的類型,類型不對(duì)在某些瀏覽器或者手機(jī)上就會(huì)出現(xiàn)下載失敗或者保存失敗的情況。

個(gè)人遇到的情況是:微信小程序內(nèi),使用application/octet-stream。下載完成后內(nèi)容的后綴為.bin,iOS手機(jī)上可以下載并保存到手機(jī)相冊(cè),安卓手機(jī)只能下載,保存失敗,提示類型不對(duì)。

3、總結(jié)

附件下載關(guān)注參數(shù)Content-Disposition。設(shè)置的類型沒有問(wèn)題,那么附件下載功能就是正常的

附件保存關(guān)注參數(shù)Content-type。類型不對(duì),下載完內(nèi)容的后綴就不對(duì),最終導(dǎo)致無(wú)法保存到相冊(cè)。因?yàn)橄鄡?cè)只能保存圖片、視頻等(如png、jpg、gif、mp4等文件)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容