NestJs的文件上传

文章介绍了在NestJs框架中使用multer库进行文件上传的两种方法,包括文件流方式和文件方式。详细讲解了如何创建文件夹、处理单文件和多文件上传,以及如何使用拦截器。最后提到了配置静态文件访问的重要性。
摘要由CSDN通过智能技术生成

这里说下NestJs的两种上传文件方式

  • 文件流的方式
  • 文件方式

在写之前可以点击看看上传文档

安装插件

npm i multer @types/multer 

文件流的方式

需要自己创建文件夹,或者使用fs创建文件夹

  1. 单文件上传
    在这里插入图片描述
    改写一下,能够自动创建文件夹
  • 创建文件夹的工具函数
// 动态新建文件夹的方法
const fs = require('fs'); // 导入 fs 模块
const path = require('path'); // 导入 path 模块

export const mkdirs:any = (pathname:string, callback) => {
  // 需要判断是否是绝对路径(避免不必要的 bug)
  pathname = path.isAbsolute(pathname) ? pathname : path.join(__dirname, pathname);
  // 获取相对路径
  pathname = path.relative(__dirname, pathname);

  // path.sep 避免平台差异带来的 bug
  const folders= pathname.split(path.sep);

  let pre = ''; // 最终用来拼合的路径
  folders.forEach(floder => {
    try {
      // 没有异常,文件已经创建,提示用户该文件已经创建
      const _stat = fs.statSync(path.join(__dirname, pre, floder));
      const hasMkdir = _stat && _stat.isDirectory();
      if (hasMkdir) {
        callback // && callback(`文件${floder}已经存在,不能重复创建,请重新创建!`)
      }
    } catch (err) {
      // 抛出异常,文件不存在则创建文件
      try {
        // 避免父文件还没有创建的时候,先创建子文件所出现的意外 bug,这里选择同步创建文件
        fs.mkdirSync(path.join(__dirname, pre, floder));
        callback && callback(null);
      } catch (error) {
        callback && callback(error);
      }
    }
    pre = path.join(pre, floder); // 路径拼合
  });
}
  • 引入使用

在这里插入图片描述
2.多文件上传

  • 如果field一样(用的name都是files),我们可选择使用 UploadedFiles 的方法来处理,并且通过 for … of 来遍历
  • 如果不一样,则提供了,如下的配置
// 多文件上传
  @Post('uploadAll')
  @UseInterceptors(
    FileFieldsInterceptor([
      { name: 'avatar', maxCount: 1 },
      { name: 'banner', maxCount: 1 },
    ]),
  )
  async uploadAll(
    @UploadedFiles()
    files: {
      avatar?: Express.Multer.File[];
      banner?: Express.Multer.File[];
    },
  ) {
    console.log(files);
    return '测试';
  }

运行测试
在这里插入图片描述
控制台就出现了上传的信息
在这里插入图片描述
后续就可以自行循环处理就行了

  • 或者使用Any类型的拦截器AnyFilesInterceptor
// 多图上传2
  @Post('uploadAny')
  @UseInterceptors(AnyFilesInterceptor())
  async uploadAny(@UploadedFiles() files:Array<Express.Multer.File>){
    console.log(files)
    return '多图上传的测试';
  }

请求测试
在这里插入图片描述
在这里插入图片描述
同样看到控制台打印出来了数组,后续操作就自行循环处理就行了

文件方式上传

创建文件上传模块

nest g res upload

在这里插入图片描述
在upload.module.ts中引入相应的包
在这里插入图片描述
配置好后就可以使用了
upload.controller.ts中使用
在这里插入图片描述
请求测试
在这里插入图片描述
在控制台就可以看到上传的信息
在这里插入图片描述
到这里就已经上传完成了,如果没有配置静态文件的访问的话,在网页上是无法访问的,所以需要自行配置静态文件的访问

这里我就贴出我的配置信息,至于自己的就需要自行修改
在这里插入图片描述
配置好后网页上测试
在这里插入图片描述

显示出来了,上传到这里就完成了
代码放置在仓库chapter7

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值