本文主要搭建一个简单的Node服务给浏览器下载文件。
下载文件需要用到一个关键的响应头字段Content-Disposition
,将这个字段设置为attachement
告诉浏览器这个请求是用于下载文件的,且可以设置下载的文件名称,比如设置Content-Disposition: attachement; filename=666.js
,则下载的文件的名称为666.js
。
服务端相关代码如下:
const http = require('http');
// 可以用于查看文件的mime值
const mime = require('mime');
const path = require('path');
const fs = require('fs');
const server = http.createServer((req, res) => {
const filepath = path.resolve(__dirname, './client.js');
fs.stat(filepath, (err, stat) => {
const stream = fs.createReadStream(filepath);
res.setHeader('Content-Type', mime.getType(filepath));
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Disposition', 'attachment; filename=666.js');
res.writeHead(200);
stream.pipe(res);
});
});
server.listen(8111, () => {
console.log('Server is listen at 8111');
});
客户端相关代码如下:
<body>
<a href="http://127.0.0.1:8111">download</a>
</body>
点击download将会下载一个名为666.js
的文件。