嗨,我想编写 API 来使用 @UseInterceptors 上传文件。我无法在其中注入 configService 值。下面是我的示例代码,
constructor(
configService: ConfigService,
) {}
@Post('product/image/:brandNo')
@UseInterceptors(
FilesInterceptor('files', 2, {
storage: diskStorage({
destination: (req, file, cb) => {
const brandNo = req.params.brandNo;
const directory = `../${this.configService.get('BASE_PATH_FILE')}/${brandNo}/product/image`;
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory, { recursive: true });
}
cb(null, directory);
},
filename: function (req, file, callback) {
callback(null, file.originalname);
},
}),
}),
)
从代码中可以看出,
${this.configService.get('BASE_PATH_FILE')}
不在这里工作。我该如何注射?
无法在 TS 装饰器中使用
this
!但在技术上可以将 configService
注入装饰器内部。
您可以检查:https://stackoverflow.com/a/60608920/10208733
试试这个:
import { Inject } from '@nestjs/common';
export const destinationFunc = (req, file, cb) => {
const configService = Inject(ConfigService);
const brandNo = req.params.brandNo;
const directory = `../${configService.get('BASE_PATH_FILE')}/${brandNo}/product/image`;
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory, { recursive: true });
}
cb(null, directory);
}
@UseInterceptors(
FilesInterceptor('files', 2, {
storage: diskStorage({
destination: destinationFunc,
filename: function (req, file, callback) {
callback(null, file.originalname);
},
}),
}),
)