【问题标题】:Download file in NodeJS在 NodeJS 中下载文件
【发布时间】:2014-01-02 06:46:30
【问题描述】:

我正在编写 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);
    });

});

【问题讨论】:

  • 当链接被点击时,只需提供带有正确标题的文件,不要为此使用 websockets
  • 我不是 100% 确定你的意思。你能详细说明一下吗?

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


【解决方案1】:

你可以简单地使用这样的东西(答案来自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);
});

【讨论】:

  • 不想使用 Express 怎么办?
猜你喜欢
  • 2021-11-05
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 2020-05-03
  • 2011-04-19
  • 2018-03-20
相关资源
最近更新 更多