風雲 (ID: 3)
头衔:论坛版主
等级:大天使
积分:1567
发帖:70 篇
来自:保密
注册:2022/3/30 15:28:53
造访:2024/11/22 10:43:44
发帖:70 篇
来自:保密
注册:2022/3/30 15:28:53
造访:2024/11/22 10:43:44
[ 第 1 楼 ]
回复
示例代码如下:
// 静态文件处理
,file(site) {
// 判断是否 ASP
if(/\.asp$/i.test(site.env.URL)) return this.asp(site);
var file = path.join(site.host.root, site.env.URL);
stat = fs.statSync(file);
var headers = { "Content-Type": getMime(path.extname(file)) };
var output = (code, arg) => {
headers["Last-Modified"] = stat.mtime.toUTCString();
site.res.writeHead(code, headers);
if(site.req.method == "HEAD") return site.res.end();
fs.createReadStream(file, arg || {}).pipe(site.res)
};
var rangeHeader = site.req.headers.range;
// 没有 Range 头时
if(!rangeHeader) {
headers["Content-Length"] = stat.size;
headers["Cache-Control"] = "max-age=2592000";
return output(200);
}
// 存在 Range 头时
var [ start, end ] = rangeHeader.match(/(\d+)/g) || [];
if(!start) start = 0;
if(!end) end = stat.size - 1;
var contentLength = end - start + 1;
headers["Content-Range"] = `bytes ${start}-${end}/${stat.size}`;
headers["Accept-Ranges"] = "bytes";
headers["Content-Length"] = contentLength;
output(206, { start: start - 0, end: end - 0 });
}
2024/2/2 11:38:18
IP:已设置保密