【发布时间】: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值!我看到您将此值赋予了mkdirRecursiveSync和writeFileSync。writeFileSync期望获取文件路径。 -
正如您在错误中看到的那样,目的地是
CDN/attachments/63aea8c5e37c6b1242a6973f/63aea86fe37c6b1242a6970a/20230112140045/
标签: angular socket.io nestjs node.js-fs