在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  網(wǎng)絡安全  HTML/ jszip+request 打包下載

jszip+request 打包下載

項目需要打包下載文件,現(xiàn)在文件是保存在七牛上,打包下載,需要通過request請求文件,然后放入到jszip里面然后打包;現(xiàn)在遇到一個問題,如果多個文件,而且比較大,會出現(xiàn)只有一個文件可以正常下載下來,其它的文件只下載的部分,會報錯:

 { 
    Error: read ECONNRESET
    at exports._errnoException (util.js:1022:11)
    at TCP.onread (net.js:610:25) code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' 
    }

代碼如下:

'use strict';
const JSZip = require('jszip');
const request = require('request');
const fs = require('fs');
const path = require('path');
const sss = path.join(__dirname, 'me.zip');

const resultArr = [
  {
    fileName: 'charles-proxy-4.1.4.dmg',
    downLoadUrl: 'http://p2oryw9jc.bkt.clouddn.com/charles-proxy-4.1.4.dmg'
  },
  {
    fileName: 'googlechrome_mac_59.0.3071.109.dmg',
    downLoadUrl: 'http://p2oryw9jc.bkt.clouddn.com/googlechrome_mac_59.0.3071.109.dmg'
  }
];
const zip = new JSZip();
resultArr.map(item => {
  let inStream = request.get(item.downLoadUrl);
  let name = item.fileName;
  const inPaht = path.join(__dirname, item.fileName);
  let length = 0;
  inStream
    .on('response', function (response) {
      console.error(name + '--content-type--', response.headers); // 'image/png'
    })
    .on('data', function (data) {
      length += data.length;
    })
    .on('error', function (e) {
      console.error(name + '---error---->', e);
    })
    .on('end', function () {
      console.error(name + '---end---- length:'+ length);
    });
  zip.file(item.fileName, inStream);
});
const stream = zip.generateNodeStream({type: 'nodebuffer', streamFiles: true});
stream.pipe(fs.createWriteStream(sss));
stream
  .on('data', function (data, metadata) {
  })
  .on('error', function (e) {
    console.error('---error-----', e);
  })
  .on('end', function () {
    console.error('---end-----');
  });

請問這是什么問題造成呢?單獨通過request下載文件沒有問題,單獨使用jszip打包本地文件也沒有問題,這兩個結(jié)合一起,就會出現(xiàn)這個問題

回答
編輯回答
尕筱澄

經(jīng)過調(diào)試,應該是

zip.file(item.fileName, inStream);

這個時候已經(jīng)去請求文件了,但是jszip是依次來處理stream,如果處理一個stream的時間比較長的話,文件服務器會自動斷開鏈接,所以最后打出來的zip包是不全的。

后來在https://github.com/archiverjs... 這個庫的基礎(chǔ)上,修改了它的代碼,實現(xiàn)了一個

https://www.npmjs.com/package...

request請求只會在處理到他的時候,才會發(fā)起請求

2018年2月24日 06:40