繁体   English   中英

Node.js 向客户端发送文件

[英]Node.js send file to client

您好,我一直在尝试将文件从 node.js 发送到客户端。

但是,当客户端转到指定的 url ( /helloworld/hello.js/test ) 时,我的代码会工作,它会流式传输文件。

从 Google Chrome 访问它会使文件 (.mp3) 在播放器中播放。

我的目标是让客户端的浏览器下载文件并询问客户端他想在哪里存储它,而不是在网站上流式传输它。

http.createServer(function(req, res) {
    switch (req.url) {
        case '/helloworld/hello.js/test':

            var filePath = path.join(__dirname, '/files/output.mp3');
            var stat = fileSystem.statSync(filePath);

            res.writeHead(200, {
                'Content-Type': 'audio/mpeg',
                'Content-Length': stat.size
            });

            var readStream = fileSystem.createReadStream(filePath);
            // We replaced all the event handlers with a simple call to readStream.pipe()
            readStream.on('open', function() {
                // This just pipes the read stream to the response object (which goes to the client)
                readStream.pipe(res);
            });

            readStream.on('error', function(err) {
                res.end(err);
            });
    }
});

您需要设置一些标题标志;

res.writeHead(200, {
    'Content-Type': 'audio/mpeg',
    'Content-Length': stat.size,
    'Content-Disposition': 'attachment; filename=your_file_name'
});

用下载代替流媒体;

var file = fs.readFile(filePath, 'binary');

res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'audio/mpeg');
res.setHeader('Content-Disposition', 'attachment; filename=your_file_name');
res.write(file, 'binary');
res.end();

以下解决方案适用于 Express JS。

app.get('/download', (req, res) => res.download('./file.pdf'))
response.writeHead(200, {
    'Content-Type': 'audio/mpeg',
     modification-date="date_object",
    'Content-Disposition: attachment; 
     filename=output.mp3' 

  });

你需要工作在你的头部分,即您的内容部署的一部分,只有这样它可以让你获取数据了。 阅读更多关于内容处置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM