Прежде всего: не имеет смысла использовать multer через встроенные FilesInterceptor
и пользовательские FilesMiddleware
. Выберите один из следующих двух параметров:
А) Используйте встроенный FilesInterceptor
(рекомендуется)
Вы можете указать конфигурацию хранилища для каждого FilesInterceptor
:
const storage = {...};
@Controller()
export class AppController {
@Post('upload')
@UseInterceptors(FilesInterceptor('files', 20, { storage }))
public async onUpload(@UploadedFiles() files) {
return files.map(file => file.filename);
}
}
Или укажите стандартную конфигурацию хранилища мультиптера , импортировав MulterModule
:
imports: [
MulterModule.register({
storage: {...},
})
]
B) Использование собственного промежуточного программного обеспечения (без FilesInterceptor
)
Используйте это только если вам нужно больше гибкости, чем обеспечивает FilesInterceptor
. Вы можете использовать Promise
, чтобы дождаться окончания загрузки. После загрузки вы можете получить доступ к новым именам файлов через req.files
.
export class FilesMiddleware implements NestMiddleware {
private storage = {...};
async use(req, res, next) {
const upload = multer({ storage: this.storage });
// wait until upload has finished
await new Promise((resolve, reject) => {
upload.array('files')(req, res, err => err ? reject(err) : resolve());
});
// Then you can access the new file names
console.log(req.files.map(file => file.filename));
return next();
}
}
Доступ к загруженным файлам вашего контроллера через объект request
:
@Post('upload')
public async onUpload(@Request() req) {
return req.files.map(file => file.filename);
}
Как получить доступ к новым именам файлов?
Вы найдете загруженные файлы в req.files
(промежуточное программное обеспечение) или @UploadedFiles() files
(перехватчик) в виде массива со следующей структурой:
[ { fieldname: 'files',
originalname: 'originalname.json',
encoding: '7bit',
mimetype: 'application/json',
destination: 'D:/myproject/src/uploads',
// This is what you are looking for
filename: 'files-1558459911159.json',
path:
'D:/myproject/src/uploads/files-1558459911159.json',
size: 2735 } ]