文件未下载 express.js res.download
File not downloading express.js res.download
我使用 json2xlsx
npm 模块 generated/exported 一个 xlsx
文件,我正在使用 express.js
的 res.download(file)
功能下载该文件.
参考:Download a file from NodeJS Server using Express
以下是我的代码:
var fs = require("fs");
var json2xls = require('json2xls');
app.use(json2xls.middleware);
app.get('/export/:id', function (req, res) {
var id = req.params.id;
db.collection('provider').findOne({_id: mongojs.ObjectId(id)}, function (err, doc) {
var jsonArr = {};
var arr = jsonArr = doc;
var xls = json2xls(arr);
fs.writeFileSync('data.xlsx', xls, 'binary'); //file exported
//Now I want to download that file
res.setHeader('Content-disposition', 'attachment; filename=data.xlsx');
res.setHeader('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.download(__dirname + '/public/data.xlsx', function (error) {
console.log(error);
});
//res.json(doc);
});
});
查看html
<div class="panel-body">
<div class="form-group" ng-repeat="(key,value) in providerList" ng-if="!$first">
<label>{{key.replace("_", " ") | uppercase}}</label>
<input type="text" class="form-control" id="title" placeholder="Enter Title" ng-model="providerList[key]">
</div>
<div class="well well-lg text-center bg-gray">
<button class="btn-lg btn-success" ng-click="export(id)">Export to Spreadsheet</button>
</div>
</div>
AngularJS控制器代码:
$scope.export = function (id) {
$http.put('/export/' + id, $scope.providerList).success(function (response) {
if (response) {
alert("File is successfully exported at: "+ response);
}
});
};
错误:{ [Error: Request aborted] code: 'ECONNABORTED' }
更新错误
如有任何帮助,我们将不胜感激。
可能是您的 .xlsx 文件保存在根 folder.So 中,将 .xlsx 文件移动到 public 文件夹下,并在 express 中启用它,如下所示.
app.use(express.static('./public'));
在res.download()
、
之前设置响应头
res.setHeader('Content-disposition', 'attachment; filename=data.xlsx');
res.setHeader('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.download(__dirname + '/data.xlsx');
更新:
根据json2xls,
你可以使用 res.xls('data.xlsx', jsonArr);
.
为此你必须为 json2xls 设置中间件
app.use(json2xls.middleware);
更新 2:
前端(AngularJS),参考this
我注意到您的 angular 控制器生成 $http.put
,但您的后端需要 GET (app.get
)。您确定这是您打算如何配置它吗?
我使用 json2xlsx
npm 模块 generated/exported 一个 xlsx
文件,我正在使用 express.js
的 res.download(file)
功能下载该文件.
参考:Download a file from NodeJS Server using Express
以下是我的代码:
var fs = require("fs");
var json2xls = require('json2xls');
app.use(json2xls.middleware);
app.get('/export/:id', function (req, res) {
var id = req.params.id;
db.collection('provider').findOne({_id: mongojs.ObjectId(id)}, function (err, doc) {
var jsonArr = {};
var arr = jsonArr = doc;
var xls = json2xls(arr);
fs.writeFileSync('data.xlsx', xls, 'binary'); //file exported
//Now I want to download that file
res.setHeader('Content-disposition', 'attachment; filename=data.xlsx');
res.setHeader('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.download(__dirname + '/public/data.xlsx', function (error) {
console.log(error);
});
//res.json(doc);
});
});
查看html
<div class="panel-body">
<div class="form-group" ng-repeat="(key,value) in providerList" ng-if="!$first">
<label>{{key.replace("_", " ") | uppercase}}</label>
<input type="text" class="form-control" id="title" placeholder="Enter Title" ng-model="providerList[key]">
</div>
<div class="well well-lg text-center bg-gray">
<button class="btn-lg btn-success" ng-click="export(id)">Export to Spreadsheet</button>
</div>
</div>
AngularJS控制器代码:
$scope.export = function (id) {
$http.put('/export/' + id, $scope.providerList).success(function (response) {
if (response) {
alert("File is successfully exported at: "+ response);
}
});
};
错误:{ [Error: Request aborted] code: 'ECONNABORTED' }
更新错误
如有任何帮助,我们将不胜感激。
可能是您的 .xlsx 文件保存在根 folder.So 中,将 .xlsx 文件移动到 public 文件夹下,并在 express 中启用它,如下所示.
app.use(express.static('./public'));
在res.download()
、
res.setHeader('Content-disposition', 'attachment; filename=data.xlsx');
res.setHeader('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.download(__dirname + '/data.xlsx');
更新:
根据json2xls,
你可以使用 res.xls('data.xlsx', jsonArr);
.
为此你必须为 json2xls 设置中间件
app.use(json2xls.middleware);
更新 2:
前端(AngularJS),参考this
我注意到您的 angular 控制器生成 $http.put
,但您的后端需要 GET (app.get
)。您确定这是您打算如何配置它吗?