【解决问题】nestjs传输文件到指定路径

问题:

FileInterceptor只有req,file,cb三个参数,req无法解析body formdata

大体思路:

发送两次请求,第一次发送相对路径,如果没有这个文件夹则创建一个然后暂时保存路径,第二次就发送文件到指定路径

部分代码:

js 复制代码
  //设置当前路径
   @Post('setpath')
   setpath(@Body() body:any){
    try {
       let path2 = join(__dirname,'../files')
       path2=join(path2,body.userid)
       path2=join(path2,body.path)
      if (!existsSync(path2)) {
        console.log('创建文件夹:', body.userid,path2);
        mkdirSync(path2, { recursive: true });
      }
      currentpath=path2
    } catch (error) {
      console.error('创建文件夹失败:', error);
    }
  }
  
   //上传文件
  @Post('ulfile')
  @UseInterceptors(FileInterceptor('file', {
    storage: diskStorage({
      destination: (  req, file, cb) => {
          // 假设 currentpath 是一个类的属性
          console.log(currentpath, 'destinationPath');
          const destinationPath = currentpath; // 提取到局部变量
       
          // 确保 destinationPath 已经被初始化
          if (!destinationPath) {
            return cb(new Error('当前路径未定义'), '');
          }
          cb(null, destinationPath);
      },
      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)}`);
      },
    }),
  }))
  ulfile(@UploadedFile() file,@Session() session) {

    return  {status:200, message: 'File uploaded successfully', file};
  }

 

效果:

相关推荐
SaebaRyo3 天前
深入理解Nest.js的基础概念
前端·后端·nestjs
程序员Qian5 天前
openai sdk 入门指南
前端·nestjs
KAI6 天前
NestJS使用拦截器和异常过滤器实现 RESTful API的统一响应格式
后端·nestjs
小p7 天前
初探typescript装饰器在一些场景中的应用
前端·typescript·nestjs
plusone9 天前
【Nest指北系列】Module
nestjs
小p9 天前
typescript中的元数据及使用场景
前端·node.js·nestjs
SaebaRyo10 天前
使用Nestjs实现基于JWT + RBAC的认证授权系统
前端·后端·nestjs
妖孽白YoonA10 天前
NestJS 系列:拦截器(Interceptors)
javascript·nestjs
SaebaRyo11 天前
使用Nestjs + ElasticSearch实现电商搜索功能
后端·elasticsearch·nestjs