将文件写入目录然后zip目录

时间:2018-03-21 15:37:34

标签: javascript node.js express mongoose

我正在尝试将文件写入目录java.lang.IllegalStateException: stream has already been operated upon or closed at java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203) at java.util.stream.ReferencePipeline.<init>(ReferencePipeline.java:94) at java.util.stream.ReferencePipeline$StatelessOp.<init>(ReferencePipeline.java:618) at java.util.stream.ReferencePipeline$3.<init>(ReferencePipeline.java:187) at java.util.stream.ReferencePipeline.map(ReferencePipeline.java:186) ,然后使用已编写的内容流式传输zip文件。但是,当返回zip文件时,它会显示templates,这是由于控制器中的Failed - Network Error。如果我删除WriteFile流,那么压缩工作正常。我的问题是如何首先编写文件然后运行zip。 fs.writeFile的归档和文件编写似乎发生了同步。

控制器:

typeArrayString

存档服务

exports.download_one_feed = function(req, res, next) {
  Feed.findOne({'name': req.params.id})
  .exec(function(err, dbfeeds){
    if(err){
      res.send('get error has occured in routes/feeds.js');
    } else {
      const feedArray = dbfeeds.feed.data;

      // write file
      // get from db collection & write file to download
      const typeArrayString = JSON.stringify(feedArray);

      let type = 'b'; // test only

      fs.writeFile(path.join(appDir, 'templates/' + type + '/template.json'), typeArrayString, (err) => {
        if (err) throw err;
        console.log('Saved!');
      })
      archiverService.FileArchiver(feedArray, res);
    }
  })
};

1 个答案:

答案 0 :(得分:0)

我使用zip.append来覆盖目录中的旧文件,而不是编写文件然后压缩目录。