我只使用了koa-bodyparser,我刚刚发现它不能解析允许上传文件的表单数据。所以我正在尝试这些模块co-busboy,koa-body,koa-better-body。但我不知道如何在保存之前重命名上传文件。因为在我想知道如何做之前我从来没有这样做过。有任何想法吗?
问问题
1038 次
3 回答
2
app.use(koaBody({
multipart:true,
encoding:'gzip',
formidable:{
uploadDir:path.join(__dirname,'public/upload'),
keepExtensions: true,
maxFieldsSize:2 * 1024 * 1024,
onFileBegin:(name,file) => {
const dir = path.join(__dirname,`public/upload/}`);
file.path = `${dir}/newPath/newFileName.png`;
},
onError:(err)=>{
console.log(err);
}
}
}));
于 2018-09-17T08:49:55.480 回答
0
可能你会想要使用这个:
https://github.com/dlau/koa-body
onFileBegin {Function} 文件开始的特殊回调。该功能由强大的直接执行。它可用于在将文件保存到磁盘之前重命名文件。查看文档
于 2018-05-26T14:50:24.590 回答
0
这取决于重命名文件的范围。
如果您想重命名文件以获得唯一性,那么大多数库都会为您处理,因此您无需执行任何操作。
如果你想给它一个自定义名称,你不能在上传之前这样做,但你可以在上传之后轻松地这样做。
这是一个使用koa-body的工作示例
// use this as first middleware
app.use(require('koa-body')({
formidable: {
uploadDir: __dirname + '/public/uploads', // upload directory
keepExtensions: true // keep file extensions
},
multipart: true,
urlencoded: true,
}));
然后在你的路线
router.post('/upload-file', async function (ctx, next) {
// file_param is the request parameter name
let filePath = ctx.request.body.files.file_param.path
// rename file
fs.renameSync(filePath , '/path/to/your_new_file');
})
于 2017-07-24T22:45:05.310 回答