成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

plus2047 / 1367人閱讀

摘要:包批量下載雖然說可以遍歷所有文件,然后去批量下載單個文件,但是這種體驗畢竟不太好,最常見的做法是把批量的文件下載并打包到中。

最近在做一個文件下載的功能,這里把做的過程中用的技術(shù)和坑簡要總結(jié)下。
上篇文章《通過 JavaScript 下載文件到本地(單文件)》說了下如何下載單文件,這篇主要說下如何做多文件的批量下載
多文件分別處理

如果文件數(shù)量可控,對于下載出來的文件格式無要求,可以用最簡單的辦法,直接遍歷文件,分別給每個下載鏈接創(chuàng)建一個單文件的download或者iframe下載鏈接。

zip包批量下載

雖然說可以遍歷所有文件,然后去批量下載單個文件,但是這種體驗畢竟不太好,最常見的做法是把批量的文件下載并打包到zip中。

所以首先的一個實現(xiàn)思路是:在代理服務(wù)里,先去遍歷所有的文件去請求文件數(shù)據(jù),然后壓縮到zip包中,然后再把zip包返回給客戶端。

這么做對于下載量數(shù)據(jù)比較小時ok,但是如果批量文件特別多特別大時,用戶要等后臺把所有的數(shù)據(jù)都請求到并且都打包都壓縮包里,前端才能有反饋,這個時間可能會耗時很長,用戶體驗可能很差。

在同事的前期調(diào)研時,有說這里可以做一個流式的邊壓縮邊下載的能力,大致的思路是,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é)需要處理:比如中文文件名的問題,是否需要下載文件總大小做限制,是否會出現(xiàn)文件不存在等等情況。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102582.html

相關(guān)文章

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

    摘要:目標(biāo)網(wǎng)站西瓜視頻項目功能下載頭條號維辰財經(jīng)下的最新個視頻項目地址地址姊妹項目批量下載美女圖集簡介一般批量爬取視頻或者圖片的套路是,使用爬蟲獲得文件鏈接集合,然后通過等方法逐個保存文件。然而在批量下載時,逐個手動的獲取視頻鏈接顯然不可取。 目標(biāo)網(wǎng)站:西瓜視頻 項目功能:下載頭條號【維辰財經(jīng)】下的最新20個視頻 項目地址:Github 地址 姊妹項目:批量下載美女圖集 簡介 一般批量...

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

    摘要:如果實在不會安裝可以去網(wǎng)上找教程。打開,跳轉(zhuǎn)到剛剛創(chuàng)建的文件夾位置,運行命令然后會在你的文件夾中搭建好了環(huán)境配置配置修改一些你的博客名字描述作者等?;谖业膫€人經(jīng)驗,建議都開啟開啟標(biāo)簽頁命令,在博客目錄添加元數(shù)據(jù)開啟分類頁命令,在博 Windows環(huán)境下Git安裝、配置SSH key、安裝node.js npm、安裝Hexo及配置、發(fā)布博客 前言 使用github pages服務(wù)搭建博客的...

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

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

    Rango 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<