作为一个菜鸟程序员,,真的遇到点问题都是百度,真就是面向百度编程了。
最近项目中要用到下载这个功能,直接一顿查,用了个最简单的,给nodejs设置响应头,写法有两种:
如下:
1.直接读取文件:
fs.readFile(filePath, function(isErr, data){
if (isErr) {
res.end("Read file failed!");
return;
}
res.writeHead(200,{
'Content-Type': 'application/octet-stream', //告诉浏览器这是一个二进制文件
'Content-Disposition': 'attachment; filename=' + fileName, //告诉浏览器这是一个需要下载的文件
});
res.end(data)
})
2.createReadStream(了解createReadStream 可以直接转到https://blog.csdn.net/buddha_itxiong/article/details/81198313):
res.writeHead(200,{
'Content-Type': 'application/octet-stream', //告诉浏览器这是一个二进制文件
'Content-Disposition': 'attachment; filename=' + fileName, //告诉浏览器这是一个需要下载的文件
});
fs.createReadStream(filePath).pipe(res);
在我的项目中使用writeHead好像有点问题,所以改成了setHeader,代码如下:
let timestamp = new Date().getTime();
let filePath = '/home/mysql/device-template.xlsx'; //此路径为需要下载的文件路径
let fileName = 'device-template_' + timestamp + '.xlsx'; //保存至本地的文件名
res.setHeader('Content-Type', 'application/octet-stream');
res.setHeader('Content-Disposition', 'attachment; filename=' + fileName);
fs.createReadStream(filePath).pipe(res);
本文参考学习了 https://www.jianshu.com/p/5c00797a08b8;
第一次写文章,不喜就喷!