首先引入 koa-multer
定义中间件:upload = multer({dest:定义路径})
在路由中引入:
app.post('/addgoods' , uploadimg.any() ,async(ctx)=>{})
如果用form表单提交 必须要添加:
enctype="multipart/form-data"
从form表单提交的file文件会缓存到public中的 upload定义的路径中;
例如:
upload = multer({ dest:"/upload"});
依据 “.”打断、并获取上传文件名
let filename = (file.originalname).split(".");
let fileN = filename[filename.length - 1];
按照日期定义存储文件位置
先引入 moment(查询时间)、path(合成路径)模块
var date = moment().format("Y-M-D");//生成当前日期 例如:2017-01-10
var dest = path.normalize(path.join( 定义目录, date));//定义要存储的目录
按照日期创建文件夹
fs.mkdir("datas/uploads/"+moment().format("Y-M-D"),function(err){console.log(err)}); //根据日期创建文件夹
获取到缓存的上传文件,将缓存转为保存。
let filepath = path.join( 缓存文件的路径, file.path); //得到当前缓存图片的绝对路径
let destfile = path.join(dest, file.filename+ "." + fileN); //得到你要保存图片的绝对路径
fs.createReadStream(filepath).pipe(fs.createWriteStream(destfile)); //将缓存变为保存的方法
fs.unlink(filepath, async (ctx, next) => {}) //unlink()删除文件
先将完整的存储路径依据,“根目录”打断。
imgurl = destfile;
let ss = imgurl.split('根目录\\');//保存图片的相对路径
ss[1] = ss[1].replace("\\", "/");//将所有 \\ 转换成 /
然后存储进数据库,需要时就可以直接引用了。
post_file : {
opts: {
middleware : uploadimg.any()
},
async handler(ctx,next) {
let imgurl;
let file = ctx.req.files;
fs.mkdir("datas/uploads/"+moment().format("Y-M-D"),function(err){console.log(err)}); //根据日期创建文件夹
for (let file of ctx.req.files) { //将req.files中的所有属性遍历出来
let filename = (file.originalname).split(".");
let fileN = filename[filename.length - 1];
let filepath = path.join(__dirname, "..","..", file.path); //得到当前缓存图片的绝对路径
let destfile = path.join(dest, file.filename+ "." + fileN); //得到你要保存图片的绝对路径
// file.filename --当前保存的文件名
fs.createReadStream(filepath).pipe(fs.createWriteStream(destfile)); //将缓存变为保存的方法
//删除文件名
fs.unlink(filepath, async (ctx, next) => { //把之前的缓存删除
console.log(">>>>>>>>", 'Remove filepath Success');
})
imgurl = destfile;
let ss = imgurl.split('LoginSystem\\'); //保存图片的相对路径 绝对与相对!!!
ss[1] = ss[1].replace("\\", "/");
let onefile = mongoose.model('File');
let oid = ctx.session.user.id;
let pubname = ctx.session.user.username;
let obj = ctx.req.body;
let newfile = new onefile({
uid : oid,
url : ss[1],
pubname : pubname,
owner : obj.sce,
filename : obj.name,
mimeType : fileN,
pubdate : Date.now()
})
await newfile.save();
console.log(">>>>>>>>>>>>success<<<<<<<<<<<<<<");
}
ctx.body = "上传成功";
}
},