我的端点适用于 png 和 jpg。 我只想允许 webp,所以我更改了文件过滤器回调,这样它就被允许了。 但是,除了 png 或 jpg 之外,它不起作用:没有错误,multer 发回一个对象,说它已成功将它保存在特定路径上,但在磁盘上什么也没有。
为什么?
这是我的配置对象(它特定于 tsed 框架,但我怀疑这会是问题所在,只是 express 之上的一个框架)> http://v4.tsed.io/tutorials/multer.html#installation
const storage = multer.diskStorage({
destination: function (req: any, file: any, cb: any) {
cb(null, './uploads')
},
filename: function (req: any, file: any, cb: any) {
let extArray = file.mimetype.split("/");
let extension = extArray[extArray.length - 1];
cb(null, file.fieldname + '-' + uuidv4() + '.' +extension)
}
})
multer: {
storage: storage,
dest: `${process.cwd()}/uploads`,
limits: {
fileSize: 7340032,
},
fileFilter: (_req: any, file: any, cb: any) => {
// there was some condition here to check mimetype and throw an error if needed but I removed it for testing with other mimetypes
return cb(null, true);
}
}
我的端点看起来像这样:
@Post("/photo")
@Authorize("jwt") @Security("jwt")
@Returns(200)
@Returns(401)
@Returns(404)
private async simpleUpload(
@MultipartFile("file")
file: PlatformMulterFile) {
if (!file) {
throw new NotFound('file not found');
}
console.log(file);
return{filename : file.filename}
}
我真的很困惑,因为我总是得到 200 响应,并且 console.log 输出如下所示:
{
fieldname: 'file',
originalname: 'pauline.pdf',
encoding: '7bit',
mimetype: 'application/pdf',
destination: './uploads',
filename: 'file-f6219302-1491-47f0-b10f-883fdc6ef15a.pdf',
path: 'uploads/file-f6219302-1491-47f0-b10f-883fdc6ef15a.pdf',
size: 12033
}
或
{
fieldname: 'file',
originalname: 'mouse_logo.svg',
encoding: '7bit',
mimetype: 'image/svg+xml',
destination: './uploads',
filename: 'file-138c1a1f-9b80-4f6c-b474-dfd25afaaf50.svg+xml',
path: 'uploads/file-138c1a1f-9b80-4f6c-b474-dfd25afaaf50.svg+xml',
size: 1076
}
在这两种情况下,都没有错误,但磁盘上也没有文件。使用完全相同的配置,上传 png 和 jpg 文件并显示文件。如果有人有线索,我会很感兴趣._.