如何将新创build的.csv文件下载到用户?
我在我的网站上创build了一个button,点击后会创build一个.csv
文件。 我想要的是这个文件被创build后立即下载到用户。 这是我到目前为止:
var data = ...; // stuff var fields = ...; // stuff json2csv({ data: data, fields: fields }, function(err, csv) { if (err) { console.log(err); } fs.writeFile('test.csv', csv, function(err) { if (err) throw err; console.log('file saved'); // now, download this file to the user. How? }); });
.csv
文件已创build,但我希望该文件可以立即下载到用户。 理想情况下,.csv文件将直接传输给用户,而不会保存在我的服务器上,但我不知道如何做到这一点。 任何帮助将非常感激。
如果您使用express,则可以使用sendFile 。 假设你的代码可以访问response
对象,你可以像这样发送文件:
var data = ...; // stuff var fields = ...; // stuff json2csv({ data: data, fields: fields }, function(err, csv) { if (err) { console.log(err); } fs.writeFile('test.csv', csv, function(err) { if (err) throw err; console.log('file saved'); var options = { root: __dirname }; res.sendFile('test.csv', options, function (err) { if (err) { console.log(err); res.status(err.status).end(); } else { console.log('Sent:', fileName); } }); }); });
至于发送文件而不保存到你的服务器,你可以设置Content-Disposition
标题:
var data = ...; // stuff var fields = ...; // stuff json2csv({ data: data, fields: fields }, function(err, csv) { if (err) { console.log(err); } res.set({ 'Content-Disposition': 'attachment; filename=test.csv', 'Content-Type': 'text/csv' }); res.send(csv); });
您可以使用适当的文件types构buildHTTP响应,如果您不使用Express,则发送它:
res.writeHead(200, { 'Content-Type': 'text/csv' }); res.write(csv); // or csv.pipe(res) if csv is a readable stream res.end();