【问题标题】:Multer mkdirSync not working when creating child folders in non-existing parent folder在不存在的父文件夹中创建子文件夹时,Multer mkdirSync 不起作用
【发布时间】:2023-01-05 19:38:14
【问题描述】:

因此,当用户将文件上传到消息时,它会将文件放入: CDN/attachments/ chatid / userid / date / the file

mkdir同步如果我这样使用它,功能就可以工作:testfolder

我的猜测,它不起作用,因为名为附件、用户 ID 等不存在。

有什么办法让它发挥作用吗?谢谢!

这是我的代码:

  @Post("uploadImg")
  @UseInterceptors(
    AnyFilesInterceptor({
      storage: diskStorage({
        destination: function (req: any, file, cb) {
          console.log(req.body , file, cb)
          if (existsSync(`CDN/attachments/${req.body.dest}`)) {
            console.log('Directory exists!')
          } else { 
            console.log("CREATE") 
            mkdirSync(`CDN/attachments/${req.body.dest}`)
          }

          // var newAbsoluteDir = `CDN/attachments/${req.body.dest}`;
          // console.log(req.body)
          // cb(null, newAbsoluteDir);
        },
        filename: function (req, file, cb) {
          cb(null, file.originalname + '-' + Date.now() + ".png");
        },
      }),
    })
  )
  async uploadedFile(@UploadedFiles() file) {
    console.log(file)
    // console.log(file)
    // return file;
  }

错误:

Error: ENOENT: no such file or directory, mkdir 'CDN/attachments/63aea8c5e37c6b1242a6973f/63aea86fe37c6b1242a6970a/20230105/'
    at mkdirSync (node:fs:1381:3)
    at DiskStorage.destination [as getDestination] (C:\Users\alms\Desktop\Chatenium2\chatenium-server\src\chat\message\dm\dm.controller.ts:52:22)
    at DiskStorage._handleFile (C:\Users\alms\Desktop\Chatenium2\chatenium-server\node_modules\multer\storage\disk.js:31:8)
    at C:\Users\alms\Desktop\Chatenium2\chatenium-server\node_modules\multer\lib\make-middleware.js:137:17
    at allowAll (C:\Users\alms\Desktop\Chatenium2\chatenium-server\node_modules\multer\index.js:8:3)
    at Multipart.<anonymous> (C:\Users\alms\Desktop\Chatenium2\chatenium-server\node_modules\multer\lib\make-middleware.js:107:7)
    at Multipart.emit (node:events:513:28)
    at HeaderParser.cb (C:\Users\alms\Desktop\Chatenium2\chatenium-server\node_modules\busboy\lib\types\multipart.js:358:14)
    at HeaderParser.push (C:\Users\alms\Desktop\Chatenium2\chatenium-server\node_modules\busboy\lib\types\multipart.js:162:20)
    at SBMH.ssCb [as _cb] (C:\Users\alms\Desktop\Chatenium2\chatenium-server\node_modules\busboy\lib\types\multipart.js:394:37)

【问题讨论】:

    标签: express nestjs multer


    【解决方案1】:

    请检查以下建议的代码:

        function mkdirRecursiveSync(path: string): void 
       {
          if (!existsSync(path)) 
         {
            mkdirRecursiveSync(dirname(path));
            mkdirSync(path);
          }
        }
        
        // ...
        
        const destPath = `CDN/attachments/${req.body.dest}`;
        mkdirRecursiveSync(destPath);
    

    现在,这里是解释。 您看到的错误,“ENOENT: no such file or directory“,当您尝试访问的文件或目录不存在时发生。在您的代码中,您似乎正在尝试在用户指定的路径上创建目录结构,但似乎父目录(例如, CDN/附件)尚不存在。

    要解决此问题,您可以先尝试创建父目录,然后再尝试创建子目录。您可以通过递归地使用 mkdirSync 函数来执行此操作,如我的代码所示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      相关资源
      最近更新 更多