如何将新创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();