【问题标题】:Type of object received during file upload using @UploadFile使用@UploadFile 上传文件时收到的对象类型
【发布时间】:2019-05-08 00:14:31
【问题描述】:

在下面的 REST API 中,接收到的文件对象的类型是什么。

@Post('/:folderId/documents/:fileName')
@UseInterceptors(FileInterceptor('file'))
@ApiConsumes('multipart/form-data')
@ApiImplicitParam({ name: 'folderId', description: ' Folder Id' })
@ApiImplicitParam({ name: 'fileName', description: ' File Name' })
@ApiImplicitFile({ name: 'file', required: true, description: 'PDF File' })
async uploadFile(@UploadedFile() file, @Param() folderId, @Param() fileName) {
/**
 * I need to know the type of file object (first argument) of uploadFile
 */
    this.folderService.uploadFile(file, folderId, fileName);
}

我需要将请求中收到的文件写入磁盘。该怎么做?

【问题讨论】:

  • 你弄清楚文件对象的类型了吗?
  • 这是 2 个独立的问题。

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


【解决方案1】:

您可以从包中导入类型。 '@types/multer' 然后将文件限定为:

        @UploadedFile() file: Express.Multer.File,

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/multer/index.d.ts#L103

【讨论】:

    【解决方案2】:

    您可以通过在MulterOptions 中指定目标路径来保存文件:

    // files will be saved in the /uploads folder
    @UseInterceptors(FileInterceptor('file', {dest: 'uploads'}))
    

    如果您想更好地控制文件的保存方式,您可以创建一个 multer diskStorage 配置对象:

    import { diskStorage } from 'multer';
    
    export const myStorage = diskStorage({
      // Specify where to save the file
      destination: (req, file, cb) => {
        cb(null, 'uploads');
      },
      // Specify the file name
      filename: (req, file, cb) => {
        cb(null, Date.now() + '-' + file.originalname);
      },
    });
    

    然后将其传递给控制器​​中的storage 属性。

    @UseInterceptors(FileInterceptor('file', {storage: myStorage}))
    

    有关更多配置选项,请参阅multer docs

    【讨论】:

      【解决方案3】:

      试试这个...

      @Post(':userid/avatar')
          @UseInterceptors(FileInterceptor('file',
            {
              storage: diskStorage({
                destination: './avatars', 
                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)}`)
              }
              })
            }
          )
          )
          uploadAvatar(@Param('userid') userId, @UploadedFile() file) {
            this.userService.setAvatar(Number(userId), `${this.SERVER_URL}${file.path}`);
          }
      

      查看此以获取更多信息 - https://www.techiediaries.com/nestjs-upload-serve-static-file/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-18
        • 1970-01-01
        • 2019-04-28
        • 1970-01-01
        • 2018-02-20
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        相关资源
        最近更新 更多