压缩
//定义要压缩的文件类型
compress: /\.(js|css|html|md)/
//压缩函数引用zlib
const {createGzip,createDeflate} = require('zlib')
module.exports = (rs ,req ,res)=>{
const acceptEncoding = req.headers['accept-encoding']
if(!acceptEncoding || !acceptEncoding.match(/\bgzip|deflate\b/)){
return rs
}else if(acceptEncoding.match(/\bgzip\b/)){
res.setHeader('Content-Encoding','gzip')
return rs.pipe(createGzip())
}else if(acceptEncoding.match(/\bdeflate\b/)){
res.setHeader('Content-Encoding','deflate')
return rs.pipe(createDeflate())
}
}
//将压缩的文件流导入res
const press = require('../handle/compress')
let rs = fs.createReadStream(filePath)
if (filePath.match(compress)) {
rs = press(rs, req, res)
}
rs.pipe(res)
range范围请求
- range:bytes=[start]-[end]
- Accept-Ranges:bytes
- Content-Range:bytes start-end/total
//定义range函数
module.exports = (totalSize, req, res) => {
const range = req.headers['range']
if (!range) {
return {code: 200}
}
const sizes = range.match(/bytes=(\d*)-(\d*)/)
const end = sizes[2] || totalSize - 1
const start = sizes[1] || totalSize - end
if (start - end < 0 || start < 0 || end > totalSize) {
return {code: 200}
}
res.setHeader('Accept-Ranges', 'bytes')
res.setHeader('Content-Range', `bytes ${start}-${end}/${totalSize}`)
res.setHeader('Content-Length', end - start)
return {
code: 206,
start: parseInt(start),
end: parseInt(end)
}
}
//设置206并导出至res
const range = require('../handle/range')
const {code,start,end} = range(stats.size,req,res)
switch (code){
case 200:{
rs = fs.createReadStream(filePath)
break
}
case 416:{
rs = fs.createReadStream(filePath)
break
}
case 206:{
rs = fs.createReadStream(filePath,{start,end})
break
}
default:{
rs = fs.createReadStream(filePath)
}
}
rs.pipe(res)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。