【问题标题】:NestJS - How/Where to configure FileInterceptor with async wayNestJS - 如何/在哪里使用异步方式配置 FileInterceptor
【发布时间】:2019-04-13 21:00:46
【问题描述】:

正如文档所说:我们可以为文件拦截器进行异步配置。

我想用它来使用我的ConfigService 作为上传目录(谁因环境而异)。 但是我不知道在哪里写这个异步配置。

文档为我们提供了一个设置配置的示例,但我不知道如何将其集成到我的项目中。

我查看了官方文档,尤其是Techniques/File UploadOverview/Middleware。我已经测试了一些实现,但我的配置似乎从未使用过。

我用这个方法来配置Multer:

MulterModule.registerAsync({
  imports: [ConfigModule],
  useFactory: async (configService: ConfigService) => ({
    storage: diskStorage({
      destination: configService.downloadFolder,
      filename: (req, file, cb) => {
        const randomName = Array(32)
          .fill(null)
          .map(() => Math.round(Math.random() * 16).toString(16))
          .join('')
        return cb(null, `${randomName}${extname(file.originalname)}`)
      }
    })
  }),
  inject: [ConfigService]
})

您知道如何集成此配置吗?

感谢您的帮助:)

【问题讨论】:

  • 这对我有用。你的控制器是什么样的?当您将 MulterModule.register 与静态值一起使用时,它是否有效?
  • 嘿@KimKern!我没有测试这个方法(MulterModule.register)。我的上传仅适用于装饰器@UseInterceptors(FileInterceptor(...))。你把MulterModule.registerAsync 放在哪里?
  • 看看我的回答,把registerAsync放在哪里。
  • 抱歉耽搁了;我不得不暂停我的项目。您的解决方案很好,谢谢@KimKern

标签: node.js file-upload interceptor multer nestjs


【解决方案1】:

您必须在AppModule 中导入MulterModule 以设置默认配置:

@Module({
  imports: [
    MulterModule.registerAsync(...)
  ],
})
export class AppModule{}

【讨论】:

  • 我有两个功能模块,我实际处理上传的文件。如果我在我的 AppModule 中导入 MulterModule,则注册的存储服务不起作用。所以显然我需要在所有功能模块中导入 MulterModule,但在那里,依赖注入不起作用。所以我坚持这个。
猜你喜欢
  • 2019-10-31
  • 2022-07-06
  • 2015-08-19
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 2020-09-22
  • 2014-07-17
相关资源
最近更新 更多