如何在带有 nestjs 的同一控制器中使用多个 diskStorage 目的地
How to use multiple diskStorage destinations in same controller with nestjs
我有一个设置了两条路由的上传控制器。一份用于 files
,一份用于 photos
。它们本质上是相同的,但我有不同的 diskStorage
目的地。问题是控制器中最后一个似乎是为两条路线设置的 diskStorage
。这可能只是我对事情如何运作的误解,但似乎我应该能够做到这一点。现在的设置方式是,files
保存在 photos
文件夹中,因为 photos
路由是最后一个,但是如果我交换路由的顺序,它们就会保存在 files
预期的文件夹。这是代码片段。
@Post('files')
@UseInterceptors(FilesInterceptor('files', null, {
storage: diskStorage({
destination: `${__dirname}../../../uploads/files`,
filename: (req, file, cb) => {
const randomName = 'a random name';
cb(null, `${randomName}${extname(file.originalname)}`);
},
}),
}))
async upload(@UploadedFiles() files) {
return files;
}
@Post('photos')
@UseInterceptors(FilesInterceptor('files', null, {
storage: diskStorage({
destination: `${__dirname}../../../uploads/photos`,
filename: (req, file, cb) => {
const randomName = 'a random name';
cb(null, `${randomName}${extname(file.originalname)}`);
},
}),
}))
async uploadPhotos(@UploadedFiles() photos) {
return photos;
}
更新
Fixed in v5.2.0. Will publish soon
应该通过更新到刚刚发布的 v5.2.0 来解决。
原答案
我认为这是 FilesInterceptor
的错误。我已经为它打开了 Github issue。
作为解决方法,您可以使用 FileInterceptor
(对于单个文件)或在两个不同的 @Controller
中定义两个端点 files
和 photos
。当我在本地测试时,这两种方式都有效。
我有一个设置了两条路由的上传控制器。一份用于 files
,一份用于 photos
。它们本质上是相同的,但我有不同的 diskStorage
目的地。问题是控制器中最后一个似乎是为两条路线设置的 diskStorage
。这可能只是我对事情如何运作的误解,但似乎我应该能够做到这一点。现在的设置方式是,files
保存在 photos
文件夹中,因为 photos
路由是最后一个,但是如果我交换路由的顺序,它们就会保存在 files
预期的文件夹。这是代码片段。
@Post('files')
@UseInterceptors(FilesInterceptor('files', null, {
storage: diskStorage({
destination: `${__dirname}../../../uploads/files`,
filename: (req, file, cb) => {
const randomName = 'a random name';
cb(null, `${randomName}${extname(file.originalname)}`);
},
}),
}))
async upload(@UploadedFiles() files) {
return files;
}
@Post('photos')
@UseInterceptors(FilesInterceptor('files', null, {
storage: diskStorage({
destination: `${__dirname}../../../uploads/photos`,
filename: (req, file, cb) => {
const randomName = 'a random name';
cb(null, `${randomName}${extname(file.originalname)}`);
},
}),
}))
async uploadPhotos(@UploadedFiles() photos) {
return photos;
}
更新
Fixed in v5.2.0. Will publish soon
应该通过更新到刚刚发布的 v5.2.0 来解决。
原答案
我认为这是 FilesInterceptor
的错误。我已经为它打开了 Github issue。
作为解决方法,您可以使用 FileInterceptor
(对于单个文件)或在两个不同的 @Controller
中定义两个端点 files
和 photos
。当我在本地测试时,这两种方式都有效。