从页面到服务器,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);
}


posted @ 2018-07-27 11:13  lingling144  阅读(614)  评论(0编辑  收藏  举报