node.js express框架实现文件上传与下载功能实例详解

2020-06-17 05:35:14易采站长站整理

本文实例讲述了node.js express框架实现文件上传与下载功能。分享给大家供大家参考,具体如下:

背景

昨天吉视传媒的客户对IPS信息发布系统又提了一个新需求,就是发布端发送消息时需要支持附件的上传,而接收端可以对发布端上传的附件进行下载;接收端回复消息时也需要支持上传附件,发布端可以对所有接收端上传的附件进行打包下载。

功能实现

前台部分

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


$scope.fileName = "";
//创建上传附件的对象
var $list = $("#thelist");
var uploader = WebUploader.create({
// 选完文件后,是否自动上传。
auto: false,
// swf文件路径
swf: '../../../lib/webUploader/Uploader.swf',
// 文件接收服务端。
server: '/publishUploadFile',
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick : {
id : '#filePicker',
//只能选择一个文件上传
multiple: false
},
// pick :'#filePicker',
method: 'POST',
});
uploader.on('fileQueued', function (file) {
$scope.fileName = file.name;
$list.html("");
$list.html(file.name);
});

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


if($scope.fileName){
//添加参数
uploader.options.formData.fileId = fileId;
uploader.options.formData.fileName = $scope.fileName;
uploader.upload();
}

后台部分

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


//发布端上传附件
exports.publishUploadFile = function (req, res) {
messageMng.publishUploadFile(req, function (err, datas) {
res.json(datas);
});
};
//下载发布端上传的附件
exports.exportPublishFile = function (req, res) {
messageMng.exportPublishFile(req, function (err, datas) {
if (err) {
res.set({
"Content-Disposition": "attachment;filename=" + encodeURI("error.txt")
});
res.write(err.message);
res.end();
} else {
res.download(datas.path, encodeURI(datas.name));
}
});
};
//接收端上传附件