WriteFile нет такого файла или каталога

У меня есть файл (data.file изображение), я хотел бы сохранить это изображение. Теперь изображение с тем же именем может существовать до него. Я хотел бы переписать, если это так, или создать его, если он не существует с тех пор. Я читал, что флаг "w" должен это сделать.

код:

            fs.writeFile('/avatar/myFile.png', data.file, {
                flag: "w"
            }, function (err) {
                if (err) {
                    return console.log(err);
                }
                console.log("The file was saved!");
            });

Ошибка:

{ [Error: ENOENT: no such file or directory, open '/avatar/myFile.png']
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '/avatar/myFile.png' }

Ответ 1

Это, вероятно, из-за того, что вы пытаетесь записать в корневую файловую систему вместо своего каталога приложений '/avatar/myFile.png'__dirname + '/avatar/myFile.png', чтобы сделать трюк, также проверьте, существует ли папка. node.js не создаст родительскую папку для вас.

Ответ 2

Многие из нас получают эту ошибку, потому что родительский путь не существует. Например, у вас есть каталог /tmp но нет папки "foo", и вы пишете в /tmp/foo/bar.txt.

Чтобы решить эту проблему, вы можете использовать:

var mkdirp = require('mkdirp');
var fs = require('fs');
var getDirName = require('path').dirname;

function writeFile(path, contents, cb) {
  mkdirp(getDirName(path), function (err) {
    if (err) return cb(err);

    fs.writeFile(path, contents, cb);
  });
}

Источник и полное обсуждение: fooobar.com/questions/106518/...

Или, если у вас есть среда, в которой вы можете использовать async/await:

const mkdirp = require('mkdirp');
const fs = require('fs');

const writeFile = async (path, content) => {
  await mkdirp(path);
  fs.writeFileSync(path, content);
}

Ответ 3

Я решил аналогичную проблему, когда пытался создать файл с именем, содержащим символы, которые не разрешены. Следите за этим, потому что он дает то же сообщение об ошибке.

Ответ 4

На самом деле, сообщение об ошибке для имен файлов, которые не разрешены в системе Linux/Unix, приводит к той же самой ошибке, которая крайне запутывает. Пожалуйста, проверьте имя файла, если у него есть какие-либо из зарезервированных символов. Это зарезервированные символы /,>, <, |,: &, для системы Linux/Unix. Для хорошего чтения перейдите по этой ссылке.

Ответ 5

Я столкнулся с этой ошибкой при асинхронном создании некоторых вложенных папок непосредственно перед созданием файлов. Папки назначения не всегда будут создаваться до того, как начнутся записи файлов. Я решил это, используя mkdirSync вместо mkdir для синхронного создания папок.

try {
    fs.mkdirSync(DestinationFolder, { recursive: true } );
} catch (e) {
    console.log('Cannot create folder ', e);
}
fs.writeFile(path.join(DestinationFolder, fileName), 'File Content Here', (err) => {
    if (err) throw err;
});

Ответ 6

У меня была эта ошибка, потому что я пытался запустить:

fs.writeFile(file)
fs.unlink(file)
...lots of code... probably not async issue...
fs.writeFile(file)

в том же сценарии. writeFile исключительная writeFile при втором вызове writeFile. Удаление первых двух звонков решило проблему.