摘要:包批量下載雖然說可以遍歷所有文件,然后去批量下載單個文件,但是這種體驗畢竟不太好,最常見的做法是把批量的文件下載并打包到中。
最近在做一個文件下載的功能,這里把做的過程中用的技術和坑簡要總結下。多文件分別處理
上篇文章《通過 JavaScript 下載文件到本地(單文件)》說了下如何下載單文件,這篇主要說下如何做多文件的批量下載
如果文件數量可控,對于下載出來的文件格式無要求,可以用最簡單的辦法,直接遍歷文件,分別給每個下載鏈接創建一個單文件的download或者iframe下載鏈接。
zip包批量下載雖然說可以遍歷所有文件,然后去批量下載單個文件,但是這種體驗畢竟不太好,最常見的做法是把批量的文件下載并打包到zip中。
所以首先的一個實現思路是:在代理服務里,先去遍歷所有的文件去請求文件數據,然后壓縮到zip包中,然后再把zip包返回給客戶端。
這么做對于下載量數據比較小時ok,但是如果批量文件特別多特別大時,用戶要等后臺把所有的數據都請求到并且都打包都壓縮包里,前端才能有反饋,這個時間可能會耗時很長,用戶體驗可能很差。
在同事的前期調研時,有說這里可以做一個流式的邊壓縮邊下載的能力,大致的思路是,chunk回包,加流式壓縮。
...... let fileCounter = 0; const zippedFilename = encodeURIComponent(downloadData.name); const list = downloadData.list || []; const header = { "Content-Type": "application/x-zip", "Pragma": "public", "Expires": "0", "Cache-Control": "private, must-revalidate, post-check=0, pre-check=0", "Content-disposition": "attachment; filename="" + zippedFilename + """, "Transfer-Encoding": "chunked", "Content-Transfer-Encoding": "binary" }; res.writeHead(200, header); archive.store = true; archive.pipe(res); list.map(item => { fileCounter++; let inStream = request.get(item.downLoadUrl); let name = item.fileName; let length = 0; inStream.on("response", function(awsData) { archive.append(inStream, { name: name }); }).on("data", function(data) { length += data.length; }).on("error", function(e) { console.error(name + "-error", e); }).on("end", function(endData) { fileCounter--; if (fileCounter < 1) { archive.finalize(); } }); }); archive.on("error", function(err) { throw err; }); archive.on("finish", function(err) { return res.end(); }); ......
當然中間還有些細節需要處理:比如中文文件名的問題,是否需要下載文件總大小做限制,是否會出現文件不存在等等情況。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102582.html
摘要:目標網站西瓜視頻項目功能下載頭條號維辰財經下的最新個視頻項目地址地址姊妹項目批量下載美女圖集簡介一般批量爬取視頻或者圖片的套路是,使用爬蟲獲得文件鏈接集合,然后通過等方法逐個保存文件。然而在批量下載時,逐個手動的獲取視頻鏈接顯然不可取。 目標網站:西瓜視頻 項目功能:下載頭條號【維辰財經】下的最新20個視頻 項目地址:Github 地址 姊妹項目:批量下載美女圖集 簡介 一般批量...
摘要:如果實在不會安裝可以去網上找教程。打開,跳轉到剛剛創建的文件夾位置,運行命令然后會在你的文件夾中搭建好了環境配置配置修改一些你的博客名字描述作者等。基于我的個人經驗,建議都開啟開啟標簽頁命令,在博客目錄添加元數據開啟分類頁命令,在博 Windows環境下Git安裝、配置SSH key、安裝node.js npm、安裝Hexo及配置、發布博客 前言 使用github pages服務搭建博客的...
摘要:分享一些超好用插件,打造一個不一樣的瀏覽器編輯器。一谷歌瀏覽器插件谷歌訪問助手強烈推薦一鍵安裝,無需其他配置,即可訪問谷歌。谷歌瀏覽器是很耗內存的,該插件會自動掛起長時間未使用的網頁,來釋放系統資源。 showImg(https://segmentfault.com/img/remote/1460000014011338); 分享一些超好用插件,打造一個不一樣的 GitHub、瀏覽器、...
閱讀 1325·2023-04-26 00:10
閱讀 2428·2021-09-22 15:38
閱讀 3746·2021-09-22 15:13
閱讀 3503·2019-08-30 13:11
閱讀 646·2019-08-30 11:01
閱讀 3028·2019-08-29 14:20
閱讀 3208·2019-08-29 13:27
閱讀 1726·2019-08-29 11:33