FileInterceptor
- это mixin
, означающее, что это функция, которая возвращает класс. Эта функция принимает конфигурацию для фактического использования перехватчиком. Вместо того, чтобы пытаться создать класс, который использует перехватчик или скрывает его, вы можете создать псевдоним для конфигурации, например, так:
export const UploadInterceptor = FileInterceptor('file', {
storage: diskStorage({
destination: './uploads'
, filename: (req, file, cb) => {
// Generating a 32 random chars long string
const randomName = Array(32).fill(null).map(() => (Math.round(Math.random() * 16)).toString(16)).join('')
//Calling the callback passing the random name generated with the original extension name
cb(null, `${randomName}${extname(file.originalname)}`)
}
}
)
Теперь с этой экспортированной константой ( это на самом деле класс), вы можете использовать перехватчик следующим образом:
@Controller('upload')
export class UploadController {
@UseInterceptors(UploadInterceptor)
@Post()
uploadFile() {
// do logic;
}
}
И все должно сработать для вас.