【发布时间】:2019-10-06 01:29:57
【问题描述】:
我有这个用于上传文件的中间件。
@Injectable()
export class FilesMiddleware implements NestMiddleware {
private storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, path.join(__dirname, '../../uploads/'));
},
filename: (req, file, cb) => {
let extArray = file.mimetype.split("/");
let extension = extArray[extArray.length - 1];
cb(null, file.fieldname + '-' + Date.now() + '.' + extension)
}
});
resolve(...args: any[]): MiddlewareFunction {
return (req, res, next) => {
console.log(req.files);
const upload = multer({storage: this.storage});
upload.any();
return next();
}
}
}
在我的请求中,当我使用 req.files 时,它给了我原始文件名而不是新文件名(带有日期等,就像我在 multer 存储选项中设置的那样)。
有没有办法让我用中间件获取刚刚上传的新文件名?
@Post('upload')
@UseInterceptors(FilesInterceptor('files[]', 20, {}))
public async onUpload(@Request() req, @Response() res, @UploadedFiles() files) {
const mediaResponse = await this.media.saveMedias(0, files);
res.json({status: true});
}
【问题讨论】:
-
您可能希望在您的
filename函数中使用file.originalname而不是file.fieldname。否则,您的所有文件都将以相同的前缀 files. 开头
标签: javascript node.js typescript multer nestjs