Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 从nodejs中的服务器下载.zip文件_Angularjs_Node.js_Csv_Zip - Fatal编程技术网

Angularjs 从nodejs中的服务器下载.zip文件

Angularjs 从nodejs中的服务器下载.zip文件,angularjs,node.js,csv,zip,Angularjs,Node.js,Csv,Zip,我使用的是MEAN,我想允许用户从服务器下载zip文件。 所以基本上我要做以下几件事: 从某些数据创建csv文件 将该文件存储到某个目录中 将这些文件压缩到zip 当用户点击按钮时,压缩文件应该被下载并可读 我已经完成了1,2,3和4部分。在这里,我已经能够成功下载zip文件,但该文件的格式已损坏,我无法读取该文件 我的下载功能代码如下: html: 下载CSV报告 角度部分: $scope.downloadFiles = function() { $http({ metho

我使用的是MEAN,我想允许用户从服务器下载zip文件。 所以基本上我要做以下几件事:

  • 从某些数据创建csv文件
  • 将该文件存储到某个目录中
  • 将这些文件压缩到zip
  • 当用户点击按钮时,压缩文件应该被下载并可读
  • 我已经完成了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);
         };
    
    $scope.downloadFiles=function(){
    $http({
    方法:“GET”,
    url:“/download/csv/files”
    }).
    成功(函数(数据、状态、标题、配置){
    var anchor=角度元素(“”);
    anchor.attr({
    href:'数据:附件'+编码URI(数据),
    目标:“\u blank”,
    下载:“filename.zip”
    })[0]。单击();
    }).
    错误(函数(数据、状态、标题、配置){
    警报。错误(数据);
    });
    };
    NodeJS:
    var path=require('path'),
    fs=要求('fs');
    exports.downaloadAllCsv=函数(请求、回复){
    var file='我的zip文件的本地路径',
    filename=path.basename(文件);
    res.setHeader('Content-disposition','attachment;filename='+filename);
    res.setHeader('Content-type:','application/zip');
    var filestream=fs.createReadStream(文件);
    filestream.pipe(res);
    };
    
    我使用了一个名为express zip的npm库(可在此处找到:)

    使用Node 4.X和express4.X,我可以从浏览器下载zip文件。让它通过Angular运行是我自己的问题:

    考虑到所有这些,以下是我的服务器代码:

    带有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文件没有损坏,并且可读