文件下载如何实现
服务端代码:
const express = require('express');
const path = require('path');
const router = express.Router()
router.get('/:filename', (req, res) => {
const filePath = path.resolve(__dirname, '../../down', req.params.filename)
res.download(filePath, req.params.filename)
})
module.exports = router;
const express = require('express');
const app = express();
// 文件下载
app.use('/api/download', require('./api/clientDown'))
服务器的响应头
这些画圈都是啥
Accept-Ranges:bytes
Content-Disposition:attachment; filename=”2.jpg”
attachment翻译过来就是附件,这句话就是浏览器以附件的形式下载文件,默认保存的文件名为2.jpg
Content-Length:12361649
Content-Type:image/jpeg
断点续传
迅雷下载协议
把完整的下砸地址拿到
AA下载地址ZZ
进行base64编码
thunder://base64编码
代码实现
<body>
<a resrole="thunder" href="/api/download/2.zip">下载</a>
<!-- 迅雷下载协议
把完整的下载地址得到
AA地址ZZ
base64编码
thunder://base64编码
-->
<script>
const a = document.querySelector("a[resrole=thunder]");
let thunderLink = `AA${a.href}ZZ`;
thunderLink = btoa(thunderLink); // base-64 编码
thunderLink = "thunder://" + thunderLink;
a.href = thunderLink;
</script>
</body>
断点续传的请求头
range:’bytes=8545332-12361648’
这个会告诉服务器我会下载那一部分的字节,当暂停下载客户端会记录这请求头的值,当恢复下载在将这个请求头发送给服务器,这就是断点续传