Сохранение файла в указанном каталоге Node.js

#javascript #node.js #fs #writefile

#javascript #node.js #fs #запись файла

Вопрос:

Я хочу сохранить изображение с помощью fs.WriteFile, но я не могу этого сделать.

Путь, по которому я хочу это сделать: C:Userspozlotosimages1232133123@gmail.com

Мой код:

     var d = new Date();
    var n = d.getTime()   ".jpeg";
    var dir = "C:/Users/poz/lotos/images/"   email;

    mkdirp(dir);

    var data = image.replace(/^data:image/jpeg;base64,/,'');

    var dir2 = dir   "/";

    fs.writeFile(__dirname  '/../../images/'   email   '/'   n, data, 'base64' , function(err){
      if (err)
        return console.log(err);
    });
  

* Папка создана.

Ошибка, которую я получаю:

[Ошибка: ENOENT: нет такого файла или каталога, открыть ‘C:Userspozlotosimages1232133123@gmail.com1602604489722.jpeg ‘] { ошибка: -4058, код: ‘ENOENT’, системный вызов: ‘open’, путь: ‘C:Userspozlotosimages1232133123@gmail.com1602604489722.jpeg ‘ }

Комментарии:

1. попробуйте mkdirp.sync(dir)

2. @ManuelSpigolon спасибо, чувак, это работает. Я думал, что это проблема с fs.WriteFile: P

3. К вашему сведению, нет смысла создавать абсолютный путь в dir переменной, создавать этот каталог, а затем не использовать ту же переменную при создании имени файла.

4. Вначале я пытался сделать все по каталогу, но это не сработало, поэтому я попытался исправить это самостоятельно, изменив путь.

Ответ №1:

 mkdirp(dir)
  

Возвращает обещание, которое не ожидается.

Вы должны вызвать

 mkdirp.sync(dir)
  

Или перепишите свой код в асинхронном стиле.

Я бы предложил использовать:

 const savePath = require('path').join(__dirname, '/../../images/', email)
  

чтобы избежать проблем, связанных с ОС или отсутствующей косой чертой.