Nest.js 中如何使用 FileInterceptor 和 FilesInterceptor 拦截器?

推荐答案

在 Nest.js 中,FileInterceptorFilesInterceptor 是用于处理文件上传的拦截器。它们通常与 @Post 装饰器一起使用,以处理单个或多个文件的上传。

使用 FileInterceptor 处理单个文件上传

-- -------------------- ---- -------
------ - ----------- ----- ------------- --------------- - ---- -----------------
------ - --------------- - ---- ---------------------------
------ - ----------- - ---- ---------
------ - ------------- --------------- - ---- ----------------------------

---------------------
------ ----- ---------------- -
  ---------------
  -----------------
    ----------------------- -
      -------- -------------
        ------------ ------------
        --------- -------------
      ---
      ----------- ----------------
    ---
  -
  -------------------------------- ----- -------------------- -
    ------ -
      --------- --------------
    --
  -
-

使用 FilesInterceptor 处理多个文件上传

-- -------------------- ---- -------
------ - ----------- ----- -------------- --------------- - ---- -----------------
------ - ---------------- - ---- ---------------------------
------ - ----------- - ---- ---------
------ - ------------- --------------- - ---- ----------------------------

---------------------
------ ----- ---------------- -
  -----------------
  -----------------
    ------------------------- --- -
      -------- -------------
        ------------ ------------
        --------- -------------
      ---
      ----------- ----------------
    ---
  -
  ------------------------------------ ------ --------------------------- -
    ------ -
      ---------- -------------- -- ---------------
    --
  -
-

本题详细解读

FileInterceptorFilesInterceptor 的作用

  • FileInterceptor: 用于处理单个文件上传。它接受两个参数:第一个参数是表单字段的名称(即前端上传文件时使用的字段名),第二个参数是一个可选的配置对象,用于指定存储引擎、文件过滤器等。

  • FilesInterceptor: 用于处理多个文件上传。它接受三个参数:第一个参数是表单字段的名称,第二个参数是最大文件数量,第三个参数是一个可选的配置对象,与 FileInterceptor 的配置对象相同。

配置对象详解

  • storage: 指定文件的存储方式。diskStorage 是常用的存储引擎,允许你将文件保存到磁盘上。你可以通过 destination 指定文件保存的目录,通过 filename 指定文件的命名规则。

  • fileFilter: 用于过滤文件。你可以通过自定义的过滤器函数来限制上传文件的类型。例如,只允许上传图片文件。

@UploadedFile@UploadedFiles 装饰器

  • @UploadedFile: 用于获取单个上传的文件。它返回一个 Express.Multer.File 对象,包含文件的元数据(如文件名、大小、MIME 类型等)。

  • @UploadedFiles: 用于获取多个上传的文件。它返回一个 Express.Multer.File 数组,每个元素都是一个文件对象。

示例代码中的工具函数

  • editFileName: 用于生成新的文件名。你可以在这个函数中自定义文件名的生成规则。

  • imageFileFilter: 用于过滤文件类型。在这个函数中,你可以检查文件的 MIME 类型,只允许特定类型的文件上传。

通过这些工具函数和拦截器,你可以轻松地在 Nest.js 中实现文件上传功能。

纠错
反馈