雖然有藍眼網盤參考,可還是費了九牛二虎之力,折騰了一個多星期,總算弄好。遇到以下幾個問題: 1.香港那個商人說地段地段還是地段,前端,前端,前端,爲了致敬(toulan)藍眼網盤,乾脆就在它上面改了,不過原版的是vue.js,我直接改html,也是醉了。因爲vue.js需要打包,很麻煩,沒html來得直接。 2.上圖中點擊1位置,展開,先關閉所有的,再展開當前這個。 用document.getElementsByClassName取出數組,循環都關閉,然後打開當前,當前的用 document.getElementById()精確獲取。 3.點擊2位置下載,這個攜帶文件id和shareuuid,及提取碼code,用fetch,blob等元素模擬<a標籤來下載res => res.blob().then(blob =>。這裏涉及中文名稱問題,見下文。 4.點擊3位置,zip下載。這個遇到了以下幾個問題: 1)壓縮文件開始用的golang的tar.gz,手機上打不開;換成zip格式的。 2)golang的gzip默認不支持中文路徑,需要加上.Format = tar.FormatGNU; 3)下載的文件名是%E8%AF%95%E9%AA%8C%E6%AE%B5%E9%A1%B9%E7%9B%AE%E7%9B%BE%E6%9E%84.tar.gz 獲取響應頭中的附件名稱:var filename = res.headers.get('Content-Disposition').split(';')[1].split('=')[1]; 加上解碼a.download = decodeURI(filename); 開始一直走了彎路,以爲是服務端需要先編碼
再加到響應頭中:res.setHeader("Content-Disposition", "attachment; filename* = UTF-8''"+name); 實際上beego的c.Ctx.Output.Download()看它源碼,已經這樣處理過了:編碼+響應頭。 所以,在前端解碼decodeURI一下就行了。 上圖紅圈的中的複製功能,用了ClipboardJS,麻煩的是在模態框中使用,也是一頓爆搜。
|
engineercms分享文件提取碼-完結
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.