如何修复 NodeJS 错误:EXDEV: cross-device link not permitted, rename ...
问题:
尝试在 NodeJS 中使用 fs.move() 重命名文件时,你看到类似这样的错误消息
exdev_error_output.txt
Error: EXDEV: cross-device link not permitted, rename '/tmp/upload_8a8c71784abf9942b40c1359935b1997' -> 'myfile.pdf'exdev_error_output.txt
Error: EXDEV: cross-device link not permitted, rename '/tmp/upload_8a8c71784abf9942b40c1359935b1997' -> 'myfile.pdf'解决方案
此错误发生是因为你正在将文件从一个驱动器(上例中的 /tmp)移动到另一个驱动器(上例中的当前目录)。在大多数平台上,这不能通过简单的重命名操作完成。
相反,使用 fs.copyFile() 复制文件。
例如,而不是
fs_move_example.ts
await fs.move('/tmp/upload_8a8c71784abf9942b40c1359935b1997', 'myfile.pdf')fs_move_example.ts
await fs.move('/tmp/upload_8a8c71784abf9942b40c1359935b1997', 'myfile.pdf')首先,复制文件:
fs_copy_example.ts
await fs.copyFile('/tmp/upload_8a8c71784abf9942b40c1359935b1997', 'myfile.pdf')fs_copy_example.ts
await fs.copyFile('/tmp/upload_8a8c71784abf9942b40c1359935b1997', 'myfile.pdf')然后 - 如果需要 - 删除源文件以尽可能模拟 os.move() 的行为。
fs_remove_unlink_example.ts
await fs.remove('/tmp/upload_8a8c71784abf9942b40c1359935b1997', 'myfile.pdf')
await fs.unlink('/tmp/upload_8a8c71784abf9942b40c1359935b1997')fs_remove_unlink_example.ts
await fs.remove('/tmp/upload_8a8c71784abf9942b40c1359935b1997', 'myfile.pdf')
await fs.unlink('/tmp/upload_8a8c71784abf9942b40c1359935b1997')Check out similar posts by category:
NodeJS
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow