簡體   English   中英

將文件寫入目錄,然后壓縮目錄

[英]Write file to directory then zip directory

我正在嘗試將文件寫入目錄templates然后使用已寫入的內容流式處理zip。 但是,返回zip文件時,它會顯示“ Failed - Network Error ,這是由於控制器中的fs.writeFile引起的。 如果我刪除WriteFile流,則壓縮效果很好。 我的問題是如何首先寫入文件,然后運行zip。 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);
    }
  })
};

檔案服務

const archiver = require('archiver')
const zip = archiver('zip')
const path = require('path')
const fs = require('fs')
const appDir = path.dirname(require.main.filename)

exports.FileArchiver = function (feedArray, res) {
    // const app = this.app;
    const uploadsDir = path.join(appDir, '/uploads/');
    const templatesDir = path.join(appDir, '/templates/');
    const extensions = [".jpg", ".png", ".svg"];
    let imageArray = [];

    const feedArrayObject = JSON.parse(feedArrayString);

    feedArrayObject.forEach(function(x){iterate(x)}); // grab image names from object
    imageArray = uniq_fast(imageArray); // remove duplicates

    // zip images
    for (let i = 0; i < imageArray.length; i++) {
      console.log(imageArray[i])
      const filePath = path.join(uploadsDir, imageArray[i]);
      zip.append(fs.createReadStream(filePath), { name: 'images/'+imageArray[i] });
    }

    res.attachment('download.zip');
    zip.pipe(res);
    // zip template directory
    console.log(templatesDir)
    zip.directory(templatesDir, false);
    zip.on('error', (err) => { throw err; });

    zip.finalize();

    return this;
  }

我沒有寫文件然后壓縮目錄,而是使用zip.append覆蓋目錄中的舊文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM