问题:
FileInterceptor只有req,file,cb三个参数,req无法解析body formdata
大体思路:
发送两次请求,第一次发送相对路径,如果没有这个文件夹则创建一个然后暂时保存路径,第二次就发送文件到指定路径
部分代码:
js
//设置当前路径
@Post('setpath')
setpath(@Body() body:any){
try {
let path2 = join(__dirname,'../files')
path2=join(path2,body.userid)
path2=join(path2,body.path)
if (!existsSync(path2)) {
console.log('创建文件夹:', body.userid,path2);
mkdirSync(path2, { recursive: true });
}
currentpath=path2
} catch (error) {
console.error('创建文件夹失败:', error);
}
}
//上传文件
@Post('ulfile')
@UseInterceptors(FileInterceptor('file', {
storage: diskStorage({
destination: ( req, file, cb) => {
// 假设 currentpath 是一个类的属性
console.log(currentpath, 'destinationPath');
const destinationPath = currentpath; // 提取到局部变量
// 确保 destinationPath 已经被初始化
if (!destinationPath) {
return cb(new Error('当前路径未定义'), '');
}
cb(null, destinationPath);
},
filename: (req, file, cb) => {
const randomName = Array(32).fill(null).map(() => (Math.round(Math.random() * 16)).toString(16)).join('');
return cb(null, `${randomName}${extname(file.originalname)}`);
},
}),
}))
ulfile(@UploadedFile() file,@Session() session) {
return {status:200, message: 'File uploaded successfully', file};
}