在NodeJS中下载文件

时间:2014-01-02 06:46:30

标签: javascript node.js stream http-headers content-disposition

我正在编写HTML WYSIWYG应用程序。在用户编辑网页后,他们应该能够单击下载按钮,并且浏览器会提示他们保存已编辑的网页。我不想将他们编辑过的网页存储在我的服务器上,而是将文件发送到本地计算机。

到目前为止,在我的应用程序中,我能够编辑模板,在用户单击下载按钮时获取HTML,并使用NodeJS的 fs.createWriteStream 方法,将HTML写入新创建的HTML文件。但是,它会在我的服务器上创建文件,而不是提示浏览器将文件保存在“下载”文件夹中。我使用Socket.io告诉服务器下载HTML内容。

经过研究,我发现为了让浏览器提示用户保存下载文件,必须使用 Content-Disposition:attachment 标头设置HTTP标头。

在摘要中,当用户单击我的应用程序中的下载按钮时,我该怎么做才能创建新文件并直接保存在用户本地计算机上而不是我的服务器上?

这就是我在server.js文件中的内容:

io.sockets.on('connection', function(socket) {
    socket.on('downloadHTML', function(data) {
        var file = fs.createWriteStream('PearlEdit-template-Martketing.html', {flags: 'w'})
                .write(data.html);
    });

});

1 个答案:

答案 0 :(得分:3)

你可以简单地使用这样的东西(答案来自here

app.get('/download', function(req, res){

  var file = __dirname + '/upload-folder/dramaticpenguin.MOV';

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