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

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

fn(null, {"name": name, "path": filePath});
}
} else {
fn(new Error("id或name不能为空"), null);
}
} catch (e) {
fn(new Error(e.message), null);
}
};
/**
* 接收端上传附件
* @param req
* @param fn
*/
MessageManager.prototype.uploadFile = function (req, fn) {
try {
//消息ID
var msgId = req.body.msgId;
//消息发送的时间
var msgSendTime = req.body.msgSendTime.slice(0, 10);
//消息的标题
var title = req.body.title;
var replyId = req.body.replyId;
var replyName = req.body.replyName;
var file = req.file;
//文件上传的目录
var uploadFolder = path.join(__dirname, '../../upload/messages/' + msgId + '/' + replyName);
//判断文件夹是否存在 不存在则创建
toolUtil.mkdirSync(uploadFolder);
//组装文件的名称 原名称+消息发送时间
var index = file.originalname.lastIndexOf(".");
var fileName = file.originalname.substr(0, index) + '-' + msgSendTime + "";
var suffix = file.originalname.substr(index, file.originalname.length - 1);
//将上传的文件从临时目录拷贝到指定的目录下
var fileReadStream = fs.createReadStream(file.path);
var fileWriteStream = fs.createWriteStream(uploadFolder + "/" + fileName + "." + suffix);
fileReadStream.pipe(fileWriteStream);
fileWriteStream.on('close', function () {
//删除临时目录下面的文件
toolUtil.emptyDir(file.destination);
});
fn(null, {"data": "", "message": "上传成功", "error_code": 200});
} catch (e) {
fn(e, {"data": "", "message": "上传失败", "error_code": e.message});
}
};
/**
* 导出消息的附件文件
* @param req
* @param fn
*/
MessageManager.prototype.exportFile = function (req, fn) {
try {
//消息ID
var id = req.query.id;
//消息名称或标题
var name = req.query.name;
if (id && name) {
//名称过长的话,截取前25个字符
if (name.length > 25) {
name = name.substr(0, 24);
}
//将要压缩得文件夹路径
var messagePath = path.join(__dirname, '../../upload/messages/' + id);
if (!fs.existsSync(messagePath)) {
fn(new Error("没有附件!"), null);
} else {
//生成得临时zip文件目录
var zipPath = path.join(__dirname, '../../upload/temp.zip');
var archive = archiver('zip', {
// Sets the compression level.
zlib: {level: 9}
});
//创建临时zip文件
var output = fs.createWriteStream(zipPath);
archive.pipe(output);
//设置需要压缩得文件夹目录 以及替换得名称
archive.directory(messagePath, name);