doomi-helper
Version:
Doomisoft NodeJs Common Utilities
56 lines (55 loc) • 2.63 kB
JavaScript
var multer = require('multer');
var path = require('path');
var fs = require('fs');
var fileUtilily = require('./filesystem/file')
/**
* 设置上传保存的路径以及输出的文件名
*/
var storage = multer.diskStorage({
//设置上传后文件路径,uploads文件夹会自动创建。
destination: function (req, file, cb) {
///获取上传的文件的类型,以便将文件保存到指定的目录
let filetype = req.query.filetype;
////不允许没有配置的文件
if (!filetype) {
req.fileerror = {successed:false,errmsg:"missing filetype for upload"};
return cb("missing filetype for upload",null);
}
let configfilename = process.env.CONFIGFILE || 'configuration.json';
let configfile = path.join(process.cwd(), configfilename);
let config = {};
if (fs.existsSync(configfile)) config = require(configfile).upload;
let saveOption = config.mapping[filetype];
if (!saveOption) {
req.fileerror = {successed:false,errmsg:"filetype not configurated in upload setting"};
return cb("filetype not configurated in upload setting",null);
}
req.fileconfig = saveOption;
/**
* 将url中的参数拼装成对象,以匹配文件存储的设置
*/
let fileparam =Object.assign({},req.user,req.query);
let destinationFolder = fileUtilily.getSaveFoler(saveOption,fileparam);
///文件上传后的短路径,相对路径,
req.shortpath = destinationFolder;
////如果目录不存在,则创建目录
destinationFolder = path.join(config.dest,destinationFolder);
if (!fs.existsSync(destinationFolder)) fileUtilily.mkdirsSync(path.resolve(destinationFolder))
cb(null, destinationFolder)
},
//给上传文件重命名,获取添加后缀名
filename: function (req, file, cb) {
let saveOption =req.fileconfig; //this.config.mapping[filetype];
if (!saveOption) {
req.fileerror = {successed:false,errmsg:"filetype not configurated in upload setting"};
cb("filetype not configurated in upload setting",null);
}
let finalFile = fileUtilily.getSaveOnlyFileName(saveOption,file.originalname);
req.shortpath = path.join(req.shortpath,finalFile);
cb(null,finalFile);
//cb(null, file.fieldname + '-' + Date.now() + "." + fileFormat[fileFormat.length - 1]);
}
});
//添加配置文件到muler对象。
var upload = multer({storage: storage});
exports = module.exports = upload;