Ошибка Операции копирования файла NodeJS Не разрешена

#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. Рад, что проблема решена 🙂