摘要:包批量下載雖然說可以遍歷所有文件,然后去批量下載單個(gè)文件,但是這種體驗(yàn)畢竟不太好,最常見的做法是把批量的文件下載并打包到中。
最近在做一個(gè)文件下載的功能,這里把做的過程中用的技術(shù)和坑簡(jiǎn)要總結(jié)下。多文件分別處理
上篇文章《通過 JavaScript 下載文件到本地(單文件)》說了下如何下載單文件,這篇主要說下如何做多文件的批量下載
如果文件數(shù)量可控,對(duì)于下載出來的文件格式無要求,可以用最簡(jiǎn)單的辦法,直接遍歷文件,分別給每個(gè)下載鏈接創(chuàng)建一個(gè)單文件的download或者iframe下載鏈接。
zip包批量下載雖然說可以遍歷所有文件,然后去批量下載單個(gè)文件,但是這種體驗(yàn)畢竟不太好,最常見的做法是把批量的文件下載并打包到zip中。
所以首先的一個(gè)實(shí)現(xiàn)思路是:在代理服務(wù)里,先去遍歷所有的文件去請(qǐng)求文件數(shù)據(jù),然后壓縮到zip包中,然后再把zip包返回給客戶端。
這么做對(duì)于下載量數(shù)據(jù)比較小時(shí)ok,但是如果批量文件特別多特別大時(shí),用戶要等后臺(tái)把所有的數(shù)據(jù)都請(qǐng)求到并且都打包都?jí)嚎s包里,前端才能有反饋,這個(gè)時(shí)間可能會(huì)耗時(shí)很長(zhǎng),用戶體驗(yàn)可能很差。
在同事的前期調(diào)研時(shí),有說這里可以做一個(gè)流式的邊壓縮邊下載的能力,大致的思路是,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(); }); ......
當(dāng)然中間還有些細(xì)節(jié)需要處理:比如中文文件名的問題,是否需要下載文件總大小做限制,是否會(huì)出現(xiàn)文件不存在等等情況。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/102582.html
摘要:目標(biāo)網(wǎng)站西瓜視頻項(xiàng)目功能下載頭條號(hào)維辰財(cái)經(jīng)下的最新個(gè)視頻項(xiàng)目地址地址姊妹項(xiàng)目批量下載美女圖集簡(jiǎn)介一般批量爬取視頻或者圖片的套路是,使用爬蟲獲得文件鏈接集合,然后通過等方法逐個(gè)保存文件。然而在批量下載時(shí),逐個(gè)手動(dòng)的獲取視頻鏈接顯然不可取。 目標(biāo)網(wǎng)站:西瓜視頻 項(xiàng)目功能:下載頭條號(hào)【維辰財(cái)經(jīng)】下的最新20個(gè)視頻 項(xiàng)目地址:Github 地址 姊妹項(xiàng)目:批量下載美女圖集 簡(jiǎn)介 一般批量...
摘要:如果實(shí)在不會(huì)安裝可以去網(wǎng)上找教程。打開,跳轉(zhuǎn)到剛剛創(chuàng)建的文件夾位置,運(yùn)行命令然后會(huì)在你的文件夾中搭建好了環(huán)境配置配置修改一些你的博客名字描述作者等?;谖业膫€(gè)人經(jīng)驗(yàn),建議都開啟開啟標(biāo)簽頁命令,在博客目錄添加元數(shù)據(jù)開啟分類頁命令,在博 Windows環(huán)境下Git安裝、配置SSH key、安裝node.js npm、安裝Hexo及配置、發(fā)布博客 前言 使用github pages服務(wù)搭建博客的...
摘要:分享一些超好用插件,打造一個(gè)不一樣的瀏覽器編輯器。一谷歌瀏覽器插件谷歌訪問助手強(qiáng)烈推薦一鍵安裝,無需其他配置,即可訪問谷歌。谷歌瀏覽器是很耗內(nèi)存的,該插件會(huì)自動(dòng)掛起長(zhǎng)時(shí)間未使用的網(wǎng)頁,來釋放系統(tǒng)資源。 showImg(https://segmentfault.com/img/remote/1460000014011338); 分享一些超好用插件,打造一個(gè)不一樣的 GitHub、瀏覽器、...
閱讀 1406·2023-04-26 00:10
閱讀 2494·2021-09-22 15:38
閱讀 4119·2021-09-22 15:13
閱讀 3608·2019-08-30 13:11
閱讀 704·2019-08-30 11:01
閱讀 3107·2019-08-29 14:20
閱讀 3271·2019-08-29 13:27
閱讀 1786·2019-08-29 11:33