阿里云OSS下載鏈接文件名

1.背景介紹

下載的資源是阿里云對(duì)象存儲(chǔ),后臺(tái)將資源鏈接簽名后返回給前端,類(lèi)似下面的鏈接(隱去了域名,并且有有效時(shí)間,不可訪問(wèn))

http://xxxxxx/book%2Foffline%2Fzip%2F2%2FISBN9787550245174_%E4%B8%80%E8%B5%B7%E6%9D%A5%E4%BC%A0%E8%AF%9D.zip?Expires=1565867136&OSSAccessKeyId=LTAIj9HegdJpycfI&Signature=9%2BmWUxAaGUZDq3CzMcsFcV4V7nQ%3D

理論上前端只需要將其包裹在<a>標(biāo)簽內(nèi)部即可

<a :href='url' ></a>

但實(shí)踐后發(fā)現(xiàn)默認(rèn)下載的文件名包含阿里云OSS的虛擬路徑,如果需求對(duì)這個(gè)名字不敏感,這個(gè)問(wèn)題可以忽略,但公司要求不能包含虛擬路徑


下載.png

2.問(wèn)題原因

下載時(shí),部分下載文件路勁被轉(zhuǎn)碼,轉(zhuǎn)碼前瀏覽器找到最后一個(gè)/并認(rèn)為之后的所有字符串(截止到參數(shù)?)是文件名即book%2Foffline%2Fzip%2F2%2FISBN9787550245174_%E4%B8%80%E8%B5%B7%E6%9D%A5%E4%BC%A0%E8%AF%9D.zip,轉(zhuǎn)碼后book/offline/zip/2/ISBN9787550245174_一起來(lái)傳話.zip
所以首先想到,在前端將URL轉(zhuǎn)碼,使用decodeURIComponent(注意與decodeURI的區(qū)別)
實(shí)踐后,點(diǎn)擊測(cè)試,貌似解決了問(wèn)題,但測(cè)試小姐姐說(shuō),隨機(jī)會(huì)出現(xiàn)下載簽名失效的問(wèn)題,起初懷疑后臺(tái)簽名出問(wèn)題,但給出的回復(fù)是這是批量簽名,不會(huì)某一個(gè)失敗,所以還是要找原因

錯(cuò)誤.png

觀察截圖的簽名,中間出現(xiàn)了空格,實(shí)際上這是不可能的,所以確定是轉(zhuǎn)碼弄出的問(wèn)題
現(xiàn)在問(wèn)題就是,資源路徑需要解碼,而簽名信息需要編碼
所以最終解決辦法是在前端將前部分資源路徑解碼,而保持后部分簽名信息不變

http://xxxxxx/book/offline/zip/2/ISBN9787550245174_一起來(lái)傳話.zip?Expires=1565867136&OSSAccessKeyId=LTAIj9HegdJpycfI&Signature=9%2BmWUxAaGUZDq3CzMcsFcV4V7nQ%3D

代碼如下(全局filter

const ossurl=function(url){
    let index = url.indexOf("?")
    if (index != -1) {
        let sig = url.slice(index)
        let urlexp = decodeURIComponent(url.slice(0, index))
        return `${urlexp}${sig}`
    }
    return url
}

不知道這樣處理是不是最佳實(shí)踐,或者是其他錯(cuò)誤導(dǎo)致現(xiàn)在的結(jié)果,希望有了解的朋友幫忙指出

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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