node . js中表达框架怎么实现文件上传与下载的功能

  介绍

这篇文章主要介绍了节点。js中表达框架怎么实现文件上传与下载的功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

<强>功能实现

<李>

前台部分

前台使用webUploader插件即可,这是百度开发的一款文件上传组件,具体使用查看它的API即可。这个项目之前开发的时候前台使用了角。js .

,, scope.fileName 美元;=,““//才能创建上传附件的对象   var 才能;list 美元;=,美元(“# thelist");   var 才能;uploader =, WebUploader.create ({   ,,,//,选完文件后,是否自动上传。   汽车:,,,,假的,   ,,,//,swf文件路径   ,,,主权财富基金:,& # 39;. ./. ./. ./lib/webUploader/Uploader.swf& # 39;,   ,,,//,文件接收服务端。   ,,,服务器:,& # 39;/publishUploadFile& # 39;   ,,,//,内部根据当前运行是创建,可能是输入元素,也可能是flash。   ,,,pick :, {   ,,,,,id :, & # 39; # filePicker& # 39;   ,,,,,//只能选择一个文件上传   ,,,,,多:假   ,,,},   ,,,//,pick : & # 39; # filePicker& # 39;   ,,,方法:,& # 39;文章# 39;   ,,});   uploader.on才能(& # 39;fileQueued& # 39;,, function (文件),{   ,,,scope.fileName 美元;=,file.name;   ,,,list.html美元(“;”);   ,,,美元list.html (file.name);   });才能

当用户选择文件的时候我创建了文件上传的对象,而在用户真正发送消息的时候我添加了相应的参数并将附件真正的上传上去,符合我这个项目的业务逻辑。

如果(scope.fileName美元){//才能添加参数   uploader.options.formData.fileId 才能=,文件标识;   时间=uploader.options.formData.fileName 才能;scope.fileName美元;   uploader.upload才能();   } <李>

后台部分

路由就不详细说明了,主要注意的是下载的接口我都是使用的就请求,这样前台在请求的时候直接新打开一个窗口拼接了相应的参数就能下载文件了。下面贴一层下行动的代码:

//发布端上传附件   时间=exports.publishUploadFile  function (点播,res), {   messageMng.publishUploadFile才能(点播,function (呃,,数据),{   ,,,res.json(数据);   ,,});   };//下载发布端上传的附件   时间=exports.exportPublishFile  function (点播,res), {   messageMng.exportPublishFile才能(点播,function (呃,,数据),{   ,,,if  (err), {   ,,,,,res.set ({   ,,,,,,,“Content-Disposition":,“附件;文件名=?+,encodeURI (“error.txt")   ,,,,,});   ,,,,,res.write (err.message);   ,,,,,res.end ();   ,,,},{else    ,,,,,res.download (datas.path, encodeURI (datas.name));   ,,,}   ,,});   };//接收端上传附件   时间=exports.uploadFile  function (点播,res), {   messageMng.uploadFile才能(点播,function (呃,,数据),{   ,,,res.json(数据);   ,,});   };//发布端导出附件   时间=exports.exportFile  function (点播,res), {   messageMng.exportFile才能(点播,function (呃,,数据),{   ,,,if  (err), {   ,,,,,res.set ({   ,,,,,,,“Content-Disposition":,“附件;文件名=?+,encodeURI (“error.txt")   ,,,,,});   ,,,,,res.write (err.message);   ,,,,,res.end ();   ,,,},{else    ,,,,,//第一种方式,下载完的zip解压报的错   ,,,,,//,res.download (datas.path, datas.name  +,“.zip");   ,,,,,//第二种方式   ,,,,,//,var 路径=癉:/maven介绍.ppt";   ,,,,,var  f =, fs.createReadStream (datas.path);   ,,,,,res.writeHead (200,, {   ,,,,,,,& # 39;内容类型# 39;:,& # 39;应用程序/force-download& # 39;   ,,,,,,,& # 39;附加# 39;:,& # 39;附件;,文件名=& # 39;+,encodeURI (datas.name), +, & # 39; . zip # 39;   ,,,,,});   ,,,,,f.pipe (res);   ,,,}   ,,});   };

这里着重说一下下载压缩时使用下载下载完的压缩包解压会报的错,使用第二种方法完美解决。

然后是服务层的代码:

/* *   ,*发布端上传附件   ,* @param 要求   ,* @param  fn   ,*/时间=MessageManager.prototype.publishUploadFile  function (点播,fn), {   try {才能   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

node . js中表达框架怎么实现文件上传与下载的功能