【问题标题】:NestJS & fs writeFile not working as expectedNestJS 和 fs writeFile 没有按预期工作
【发布时间】:2023-01-12 23:34:22
【问题描述】:

因此,当我尝试使用 Angular 通过 NestJS FS 和 Socket.io 上传文件时,出现错误:

Error: EISDIR: illegal operation on a directory, open 'CDN/attachments/63aea8c5e37c6b1242a6973f/63aea86fe37c6b1242a6970a/20230112140045/'
    at Object.openSync (node:fs:584:3)
    at writeFileSync (node:fs:2201:35)
    at C:\Users\alms\Desktop\Chatenium2\chatenium-server\src\chat\message\dm\dm.service.ts:87:26
    at Array.forEach (<anonymous>)
    at Socket.<anonymous> (C:\Users\alms\Desktop\Chatenium2\chatenium-server\src\chat\message\dm\dm.service.ts:74:20)
    at Socket.emit (node:events:513:28)
    at Socket.emitUntyped (C:\Users\alms\Desktop\Chatenium2\chatenium-server\node_modules\socket.io\dist\typed-events.js:69:22)
    at C:\Users\alms\Desktop\Chatenium2\chatenium-server\node_modules\socket.io\dist\socket.js:614:39
    at processTicksAndRejections (node:internal/process/task_queues:77:11)

你能告诉我为什么吗?谢谢

这是我的代码:

角度(前端):


      if (ok == true || this.draftImages.length !== 0) {

        let files: any = []

          let dateX = cur_day + hours + minutes + seconds;

          this.draftImages.forEach((file: any) => {
            files.push(file.file)
          })

            this.dmService.sendMessage({
              message: message,
              chatid: this.chatid,
              userid: this.userData.userid,
              username: this.userData.username,
              pfp: this.userData.pfp,
              files: files,
              filesDest: `${this.chatid}/${this.userData.userid}/${dateX}/`
            });

  }

NestJS(后端(“数据”是来自 socket.on 函数的数据)):

        data.files.forEach(file => {

          console.log("FILE:"+file)

          function mkdirRecursiveSync(path: string) {
            if (!existsSync(path)) {
              mkdirRecursiveSync(dirname(path));
              mkdirSync(path);
            } 
          } 

          mkdirRecursiveSync(`CDN/attachments/${data.filesDest}`)

            writeFileSync(`CDN/attachments/${data.filesDest}`, file)
        });  
            

【问题讨论】:

  • mkdirRecursiveSync 是自定义函数吗?
  • 是的,它在代码中
  • 我问是因为错误是指您试图对文件夹而不是文件进行操作。所以放一个日志并检查data.filesDest值!我看到您将此值赋予了 mkdirRecursiveSyncwriteFileSyncwriteFileSync 期望获取文件路径。
  • 正如您在错误中看到的那样,目的地是CDN/attachments/63aea8c5e37c6b1242a6973f/63aea86fe37c6b1242a6970a/20230112140045/

标签: angular socket.io nestjs node.js-fs


【解决方案1】:

抛出错误是因为您试图写入目录而不是文件。您需要指定一个文件名,以便 node.js 可以写入。

如果 CDN/attachments/63aea8c5e37c6b1242a6973f/63aea86fe37c6b1242a6970a/20230112140045/ 是文件路径,则应从路径末尾删除 /。否则,如果这不是文件路径,而是目录路径,那么您需要为文件指定一个名称,如下所示:

writeFileSync(`CDN/attachments/${data.filesDest}/${someFileName}`, file)

fs.writeFileSync(文件、数据、选项)

more about writeFileSync

【讨论】:

  • 谢谢!它的工作
猜你喜欢
  • 2020-01-15
  • 1970-01-01
  • 2016-08-13
  • 2013-07-07
  • 2012-12-05
  • 2017-05-22
  • 2019-07-28
  • 2014-05-24
  • 1970-01-01
相关资源
最近更新 更多