JavaScript 开发过程中,会经常遇到文件下载的需求。之前的处理方式大多是后端返回文件流,或者下载的地址,前端使用 JavaScript实现下载逻辑。
HTTP中 Content-Disposition 可以更方便的实现这一需求。
Disposition 字段影响的行为是客户端会根据它的值判断是应该将报文数据当做即使浏览的内容,还是可下载的附件。
- 当内容只需即时查看时,它的值为 inline。
- 当数据可以存为附件时,它的值为 attachment。
此外,Content-Disposition 字段还能通过参数指定保存时应该使用的文件名。
示例如下:
const http = require('http')
const fs = require('fs')
http.createServer((req, res) => {
fs.readFile('./mapMask.js', (err, data) => {
if (err) throw new Error(err)
// 设置内容
res.setHeader('Content-Type', 'text/javascript; charset=utf-8')
res.setHeader('Content-Length', data.length)
res.setHeader('Content-Disposition', 'attachment; filename="fi.js"')
res.writeHead(200)
res.end(data)
})
}).listen(5555, () => console.log('http://localhost:5555'))