【问题标题】:zip file attached but not downloading in clientzip 文件附加但未在客户端下载
【发布时间】:2018-03-24 23:56:44
【问题描述】:

我正在尝试在我的 MERN 应用程序中下载一个 zip 文件。我在响应中得到文件,但客户端没有下载实际文件。我正在使用归档器压缩文件,然后在 fetch 调用中返回它们。

存档服务:

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 (feed, res) {
    // const app = this.app;
    const uploadsDir = path.join(appDir, '/uploads/');
    const templatesDir = path.join(appDir, '/templates/');
    const feedArray = feed.feed.data;

    const extensions = [".jpg", ".png", ".svg"];
    const feedArrayString = JSON.stringify(feedArray);
    const feedArrayObject = JSON.parse(feedArrayString);
    let imageArray = [];
    let templateType = 'b'; //test

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

    // 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(feed.name + '.zip');
    zip.pipe(res);

    zip.append(feedArrayString, { name: 'feed.json' })
    zip.directory(templatesDir + '/' + templateType, false);

    zip.on('error', (err) => { throw err; });
    zip.on('warning', (err) => {
      if (err.code === 'ENOENT') {
        console.log('ENOENT for archive')
      } else {
        throw err;
      }
    });

    zip.finalize();

    return this;
 }

客户端获取:

export const downloadData = (url, _id, name, type) => {
  return fetch(url, {method: 'GET'})
  .then((res) => {
    console.log(res);
    return res;
  })
}

附加的客户端标头:

content-disposition: attachment; filename="a_gpo.zip"
content-type: application/zip

网络请求响应返回 200 状态,我还可以看到客户端中的附件响应包含 zip 文件行话。但是客户端不会返回实际的文件下载。

【问题讨论】:

    标签: javascript node.js reactjs express


    【解决方案1】:

    尝试将浏览器位置重定向到 URL

    export const downloadData = (url) => {
        window.location = url;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-10
      • 2016-10-23
      • 2019-07-08
      • 1970-01-01
      • 2014-08-22
      • 2018-03-27
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多