我一直在寻找stackoverflow的答案,但我没有成功。
我在路由中有一个node.js方法,它使用docxtemplater库从另一个模板生成.docx模板。
我从angularjs向我的/ api / generateReport发送了一些帖子和一些数据,我生成了这个.docx,但我无法设法发送它。 不建议也不安全将文件放在/ public目录中,但是如果我将文件放在/ public目录中并且我提供AngularJs的文件路径,我就无法下载它。
我已经阅读过blob和其他内容,但我无法下载.docx文件。
PS:我使用$ resource指令处理api请求,我已将responseType设置为arrayBuffer
angular.module('MyApp')
.factory('GenerateReport', function($http, $location,$resource, $rootScope, $alert, $window) {
return $resource("/api/GenerateReport/:id",{}, {
'query': {
method: 'GET',
isArray: false
},
responseType: 'arrayBuffer'
});
});

我以这种方式发送回复。
var fileDocx = fs.readFileSync(__base + "/plantillaSalida.docx", "binary");
res.send(fileDocx);
角度控制器收到响应:
GenerateReport.save({
projectExecution: $scope.projectExecution,
auditingProject: $scope.auditingProject,
participants: $scope.participants,
exampleProjects: $scope.exampleProjects
}, function(response) {
/***What to to here??***/
$mdToast.show(
$mdToast.simple()
.content('Informe generado')
.position('bottom right left')
.hideDelay(3000)
);
},
function(error) {
console.log("error");
$mdToast.show(
$mdToast.simple()
.content('Error al general el informe')
.position('bottom right left')
.hideDelay(3000)
);
}
);

答案 0 :(得分:0)
我建议将下载标题添加到您的文件中,并使用超链接(<a href="/download">
)
var path = require('path');
var mime = require('mime');
app.get('/download', function(req, res){
var file = __base + "/plantillaSalida.docx";
var filename = path.basename(file);
var mimetype = mime.lookup(file);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
});
如果您在代码
下使用快速使用app.get('/download', function(req, res){
var file = __base + "/plantillaSalida.docx";
var filename = path.basename(file);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.download(file);
});