下载csv文件node.js

Tru*_*ran 8 csv download node.js

我正在使用node.js构建一个应用程序并尝试将数据下载为csv文件.我正在使用json2csv(https://www.npmjs.com/package/json2csv).但是,我配置它的方式,.csv文件存储在我的应用程序的根目录中.我希望将文件作为下载文件发送给用户 - 例如,该文件应出现在用户的/downloads文件夹中.这是我目前的代码:

var fields = ['car', 'price', 'color'];
var myCars = [
  {
    "car": "Audi",
    "price": 1,
    "color": "blue"
  }, {
    "car": "BMW",
    "price": 1,
    "color": "black"
  }, {
    "car": "Porsche",
    "price": 1,
    "color": "green"
  }
];

json2csv({ data: myCars, fields: fields }, function(err, csv) {
  if (err) console.log(err);
  fs.writeFile('file.csv', csv, function(err) { //currently saves file to app's root directory
    if (err) throw err;
    console.log('file saved');
  });

});

var file = '../software-project-metric-dashboard/file.csv';
res.download(file, 'testfile.csv'); 
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

谢谢!

Kie*_*lus 18

如果您使用快递,请使用res.send .

您必须定义HTTP GET路由,其类似于:

app.get("/pathToYourDownload", function (req, res) {
  json2csv({ data: myCars, fields: fields }, function(err, csv) {
    res.setHeader('Content-disposition', 'attachment; filename=data.csv');
    res.set('Content-Type', 'text/csv');
    res.status(200).send(csv);
  });
});
Run Code Online (Sandbox Code Playgroud)


Ale*_*der 12

快递服务器上:

const json2csv = require('json2csv').parse;

const csvString = json2csv(yourDataAsArrayOfObjects);
res.setHeader('Content-disposition', 'attachment; filename=shifts-report.csv');
res.set('Content-Type', 'text/csv');
res.status(200).send(csvString);
Run Code Online (Sandbox Code Playgroud)

在客户端(否则大多数浏览器不会下载文件,即使您会在网络面板中看到正确的响应):

window.open(downloadUrl);
Run Code Online (Sandbox Code Playgroud)

  • 赞成这个答案,因为即使我已经达到了所有数据实际上都存在的程度,浏览器也不会将其作为文件下载。“window.open”是客户端缺失的部分! (3认同)