What does this error actually mean? What is a "cross-device link"?
It is mentioned on this libuv page but it doesn't give any details beyond "cross-device link not permitted".
What does this error actually mean? What is a "cross-device link"?
It is mentioned on this libuv page but it doesn't give any details beyond "cross-device link not permitted".
It is used for EXDEV on Linux:
See man rename
manpage:
EXDEV oldpath and newpath are not on the same mounted filesystem. (Linux permits a filesystem to be mounted at multiple points, but rename() does not work across different mount points, even if the same filesystem is mounted on both.)
This error is also used when there is ERROR_NOT_SAME_DEVICE
on Windows, see:
For more info see:
winerror.h 0x80070011
#define ERROR_NOT_SAME_DEVICE
The system cannot move the file to a different disk drive.
It sounds like you're trying to rename a file across "device" (partition) boundaries.
Say that /tmp
is a different partition than /
. That means that you're not allowed to do this:
fs.rename('/tmp/myfile.txt', '/myfile.txt', ...)
(the same applies to fs.renameSync()
as well, obviously)
If you want to do that, you need to first copy the file to its new location, and subsequently remove the old file. There are modules, like mv
, that can help you with that.
fs.copyFile
didn't exist at the time I wrote this answer :D –
Weinstock It is used for EXDEV on Linux:
See man rename
manpage:
EXDEV oldpath and newpath are not on the same mounted filesystem. (Linux permits a filesystem to be mounted at multiple points, but rename() does not work across different mount points, even if the same filesystem is mounted on both.)
This error is also used when there is ERROR_NOT_SAME_DEVICE
on Windows, see:
For more info see:
winerror.h 0x80070011
#define ERROR_NOT_SAME_DEVICE
The system cannot move the file to a different disk drive.
I guess you are trying to copy a file from /temp
folder since the form. I solved it coping, not renaming
fs.copyFile(oldpath, newpath, function (err) {
if (err) throw err;
res.write('File uploaded and moved!');
res.end();
});
Just for they guys who are using Linux this happens when your old path i.e. /tmp
and new path are on different partitions or disks.
In my case i change the code from
for (const file of files) {
const tempPath = file[1].filepath;
await fs.rename(tempPath, targetPath + file[1].originalFilename);
}
To the following code
for (const file of files) {
const tempPath = file[1].filepath;
await fs.copyFile(tempPath, targetPath + file[1].originalFilename);
await fs.rm(tempPath);
}
and it work fine for me
I think the issue is we cannot move the temp file directly from node
In my case using Node v16.20 I changed:
await fs.promises.rename(appPath, targetDir)
to
await fs.promises.cp(appPath, targetDir, {
recursive: true,
})
await fs.promises.rm(appPath, {
recursive: true,
})
© 2022 - 2024 — McMap. All rights reserved.