您好,我一直在尝试将文件从node.js发送到客户端。
我的代码有效,但是当客户端转到指定的url(/helloworld/hello.js/test)时,它将流式传输文件。
/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();