前端附件下載時(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等文件)