您的位置:首页 > 其它

koa 文件下载

2015-09-16 13:26 363 查看

项目地址:https://github.com/zfeig/koa-mvc.git

接着前面一片文章“koa文件上传”,现在要实现koa文件下载了,打算通过浏览器列出文件列表,通过get方法传递文件相关路径信息,然后点击下载按钮,进行文件下载。

功能以实现,核心代码如下:

download : function*(){
var  p= this.query.p||'unkonw';
//取文件名
var start =p.lastIndexOf('/');
var filename = p.substring(~~start+1);
console.log(filename);

//取真实文件路径
var filepath= path.join(__dirname+'/../public/',p);
console.log(filepath);
this.set('Content-disposition','attachment;filename='+filename);
//var output =fs.createReadStream(filepath);
//console.log(output);
//output.pipe(this.res);
var info =yield F.readData(filepath);
console.log(info);
this.body=info;
},


文件读写函数readData

function  readData(path){
return new Promise(function(resolve,reject){
fs.readFile(path,function(err,data){
if(err){
reject(err);//文件存在返回true
}else{
resolve(data);//文件不存在,这里会抛出异常
}
});
}).then(function(data){
console.log(data);
return data;
},function(err){
console.log(err);
return err;
});
}
module .exports.readData =readData;


原理也很简单:首先通过get获取到文件的相对路径地址;然后解析出文件名和文件的绝对地址;拿到绝对地址后通过readFile读取文件内容;同时设置header头;Content-disposition:attachment;filename=解析到的文件名;最后将解析到的内容输入到this.body;最后通过浏览器进行文件下载的功能也大功告成了!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: