【问题标题】:download .zip file from server in nodejs在nodejs中从服务器下载.zip文件
【发布时间】:2015-08-28 10:50:24
【问题描述】:

我正在使用 MEAN,我希望允许用户从服务器下载 zip 文件。 所以基本上我必须做以下事情:

  1. 根据特定数据创建 csv 文件。
  2. 将该文件存储到某个目录中。
  3. 将这些文件压缩为 zip。
  4. 当用户点击按钮时,压缩文件应该被下载并且可读。

我完全达到了 1,2,3,部分达到了 4。在此我已经能够成功下载 zip 文件,但此文件格式已损坏,我无法读取此文件。

我的下载功能代码在这里:

html: 下载 CSV 报告

角部分:

$scope.downloadFiles = function() {
    $http({
      method: 'GET',
      url: '/download/csv/files'
    }).
    success(function(data, status, headers, config) {
      var anchor = angular.element('<a/>');
      anchor.attr({
        href: 'data:attachment' + encodeURI(data),
        target: '_blank',
        download: 'filename.zip'
      })[0].click();
    }).
    error(function(data, status, headers, config) {
      alertify.error(data);
    });
  };

NodeJS:

    var path = require('path'),
        fs = require('fs');

    exports.downaloadAllCsv = function(req, res) {

    var file = 'local path to my zip file',
      filename = path.basename(file);

      res.setHeader('Content-disposition', 'attachment; filename=' + filename);

      res.setHeader('Content-type:',' application/zip');

      var filestream = fs.createReadStream(file);
      filestream.pipe(res);
     };

【问题讨论】:

    标签: angularjs node.js csv zip


    【解决方案1】:

    我使用了一个名为 express-zip 的 npm 库(可在此处找到:https://www.npmjs.com/package/express-zip

    使用 Node 4.X 和 Express 4.X,我可以从我的浏览器下载一个 zip 文件。让它通过 Angular 工作是什么导致我自己的问题: Client download of a server generated zip file

    鉴于所有这些,这是我的服务器代码:

    带有 express-zip 的节点 (4.X) 代码:

    router.get('/bulkdownload',function(req,resp){
        var titles = req.query.titles || [];
    
        if ( titles.length > 0 ){
            utils.getFileLocations(titles).
            then(function(files){
                let filename = '/tmp/zipfile.zip';
    
                // .zip sets Content-Type and Content-disposition
                resp.zip(files,filename);
            },
            _errorCb)
        }
    });
    

    utils.getFileLocations(titles) 返回一个承诺,其中files 是这样的数组:

    [{path: '/path/to/file/file.abc',name:'file.abc'},{...},{...},...]
    

    我的 .zip 文件没有损坏,并且是可读的。

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 2020-05-23
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 2019-03-30
      相关资源
      最近更新 更多