成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

通過 Node 批量下載文件到本地(多文件)

plus2047 / 1452人閱讀

摘要:包批量下載雖然說可以遍歷所有文件,然后去批量下載單個(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

相關(guān)文章

  • Node 批量爬取頭條視頻并保存

    摘要:目標(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)介 一般批量...

    Jioby 評(píng)論0 收藏0
  • 使用hexo+github搭建免費(fèi)個(gè)人博客詳細(xì)教程

    摘要:如果實(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ù)搭建博客的...

    番茄西紅柿 評(píng)論0 收藏0
  • 超好用的谷歌瀏覽器、Sublime Text、Phpstorm、油猴插件合集

    摘要:分享一些超好用插件,打造一個(gè)不一樣的瀏覽器編輯器。一谷歌瀏覽器插件谷歌訪問助手強(qiáng)烈推薦一鍵安裝,無需其他配置,即可訪問谷歌。谷歌瀏覽器是很耗內(nèi)存的,該插件會(huì)自動(dòng)掛起長(zhǎng)時(shí)間未使用的網(wǎng)頁,來釋放系統(tǒng)資源。 showImg(https://segmentfault.com/img/remote/1460000014011338); 分享一些超好用插件,打造一個(gè)不一樣的 GitHub、瀏覽器、...

    Rango 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<