从页面到服务器,node实现文件下载
Posted lingling144
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从页面到服务器,node实现文件下载相关的知识,希望对你有一定的参考价值。
起因:
新来了一个需求,让用户下载一个200m的zip文件,并且校验用户信息,难点:下载的文件是200M的。
现在维护的系统,以前的文件下载,走的是node的静态文件,用的express框架上自带的静态文件资源配置,用法如下:
//静态文件资源目录配置
app.use(express.static(__dirname + ‘/public‘))
这种方式是不能校验用户信息的,因为不走路由,也不走路由后面的后台逻辑层,所以改用get请求到后台,验证用户信息后再读取文件,将文件流返回到页面
页面请求方式:
window.location.href="/boxpro/downloadZip";
路由后逻辑层代码:
//以文件流的形式下载文件(因为文件太大,不能使用读取完文件之后再响应到页面的方式,太慢)
var filePath = path.join(__dirname, ‘../../public/template/zz.zip‘);
var stats = fs.statSync(filePath);
var isFile = stats.isFile();
if(isFile){
res.set({
‘Content-Type‘: ‘application/octet-stream‘, //告诉浏览器这是一个二进制文件
‘Content-Disposition‘: ‘attachment; filename=zz.zip‘, //告诉浏览器这是一个需要下载的文件
‘Content-Length‘: stats.size //文件大小
});
fs.createReadStream(filePath).pipe(res);
} else {
res.end(404);
}
以上是关于从页面到服务器,node实现文件下载的主要内容,如果未能解决你的问题,请参考以下文章