gpt4 book ai didi

javascript - 如何从 Node.js 下载 AngularJs Controller 中的 .docx 文件

转载 作者:搜寻专家 更新时间:2023-11-01 00:06:50 27 4
gpt4 key购买 nike

我一直在 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);

在 Angular Controller 中收到响应:

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)
);
}
);

最佳答案

我建议将下载 header 添加到您的文件并使用超链接 (<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);
});

如果您使用的是 express,请使用下面的代码

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);
});

关于javascript - 如何从 Node.js 下载 AngularJs Controller 中的 .docx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33906672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com