文件目录结构
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<a href="/api/download" target="_blank">download</a>
</body>
</html>
index.js
const http = require('http')
const fs = require('fs')
const path = require('path')
// 创建http服务器
const app = http.createServer((req, res) => {
const { method, url } = req
if (method === 'GET' && url === '/') {
// 读取index.html文件
fs.readFile(path.resolve(__dirname, './index.html'), (err, data) => {
if (err) {
throw err
}
res.setHeader('Content-Type', 'text/html')
// 返回并渲染index.html页面
res.end(data)
})
} else if (method === 'GET' && url === '/api/download') {
// 读取PDF文件
fs.readFile(path.resolve(__dirname, './docker入门与实践.pdf'), (err, data) => {
if (err) {
throw err
}
res.setHeader('Content-Type', 'application/pdf')
// 设置文件名
const fileName = encodeURI('docker入门与实践')
// Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件
// attachment 以附件形式下载
res.setHeader('Content-Disposition', `attachment; filename=${fileName}.pdf`)
// 返回数据
res.end(data)
})
}
})
// 监听端口号为3000
app.listen(3000, () => {
console.log('listening port 3000...')
})
**执行命令**
```javascript
node download/index.js
结果