Angularjs 从nodejs中的服务器下载.zip文件
我使用的是MEAN,我想允许用户从服务器下载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
$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文件没有损坏,并且可读