#node.js #node-modules
Вопрос:
Я пытаюсь скопировать файлы img из одного каталога в другой каталог. Я получаю следующую ошибку Error: EPERM: operation not permitted, copyfile
. Я видел другие сообщения об этой ошибке и пробовал их методы, но ни один из них не кажется полезным.
fs.exists(__dirname `/img/${imgSrc}`, (exists)=>{
if(exists){
let imgPath = __dirname `/img/${imgSrc}`
let destinationFolder = __dirname `/projects/${circuitName}-${fuseName}/${poleNumber}`
fs.copyFile(imgPath, destinationFolder,(err)=>{
if(err){
console.log('Error. Unable to transfer file.', err)
}else{
console.log(`Success - File copied: ${imgSrc}`)
}
} )
}else{
console.log('file does not exist')
}
})
***folder structure***
server folder
- img folder //where I am copying img file from
- project folder//where I want to transfer into
- package.json file
- main server.js file //where I am coding from
Комментарии:
1. Это проблема с разрешением. Убедитесь, что у узла есть доступ к каталогу. Где корень этого? Это под
/var/www
водой ?2. Пожалуйста, ознакомьтесь с обновленным сообщением. Я добавил структуру папок
3. Как говорит @Andy, это разрешения на папку.
4. Попробуй
sudo chmod -R 775 </img/folder and project/folder>
5. Я попробовал это, и там написано, что синтаксис команды неверен
Ответ №1:
Здесь вы не проверяете read
ни разрешение вашего исходного файла, ни write
разрешение destination
каталога.
И, кстати fs.exists
, помечен как устаревший в документах.
Я реализовал copyFile
функцию ниже. Посмотрим, сработает ли это для вас.
const path = require("path");
const fs = require("fs");
// Note I'm using the promised version of fs
const fsp = fs.promises;
async function copyFile(sourceDirPath, destDirPath, filename) {
const sourceFilePath = path.join(sourceDirPath, filename);
const destFilePath = path.join(destDirPath, filename);
try {
await fsp.access(sourceFilePath, fs.constants.R_OK);
await fsp.access(destDirPath, fs.constants.W_OK);
await fsp.copyFile(sourceFilePath, destFilePath);
console.log("File copied successfully.");
} catch (ex) {
if (ex.errno === -2)
console.error(`File "${sourceFilePath}" doesn't exist.`);
else if (ex.errno === -13)
console.error(`Could not access "${path.resolve(destDirPath)}"`);
else
console.error(`Could not copy "${sourceFilePath}" to "${destDirPath}"`);
// console.log(ex);
}
}
copyFile("./", "./output", "file.txt");
Моя структура папок:
|- copyFile.js
|- file.txt
|- output/
|-
Комментарии:
1. Я сделал это, но ничего не вышло. У меня нет на это разрешения, говорит
2. Тогда у вас нет разрешения. Это просто 🙂
3. Нашел решение. Мне нужно было добавить imgSrc также рядом с целевым путем при запуске. Например: файл копирования(imgPath, путь удаления imgSrc, ((ошибка)=>{})
4. Рад, что проблема решена 🙂