экспресс-загрузка файла: нет такого файла или каталога - PullRequest
0 голосов
/ 08 апреля 2019

Я использую пакет экспресс-файла.Я использую это так:

const upload = require('express-fileupload');
app.use(upload({
    createParentPath: true
}));

Вот как я храню:

await req.files.main_image.mv('./public/images/movies/'+main_image);

У меня уже есть каталог public / images.У меня нет каталога фильмов в каталоге public / images.

Когда он работает: Если каталог / public / images / movies уже создан, он работает

Когда это не работает : Если у меня нет каталога / public / images / movies, но есть каталог / public / images.Затем он говорит:

ENOENT: такого файла или каталога нет, откройте 'C: \ Users \ glagh \ Desktop \ Work \ MoviesAdviser \ public \ images \ movies \ 1554741546720-8485.11521.brussels.the-hotel-brussels.amenity.restaurant-AD3WAP2L-13000-853x480.jpeg

Что делать, чтобы он автоматически создавал каталог / movies и помещал туда изображение?

1 Ответ

0 голосов
/ 08 апреля 2019

Express-fileupload использует следующий код для создания пути к каталогу, который вы передаете функции .mv:

const checkAndMakeDir = function(fileUploadOptions, filePath){
  //Check upload options were set.
  if (!fileUploadOptions) return false;
  if (!fileUploadOptions.createParentPath) return false;
  //Check whether folder for the file exists.
  if (!filePath) return false;
  const parentPath = path.dirname(filePath);
  //Create folder if it is not exists.
  if (!fs.existsSync(parentPath)) fs.mkdirSync(parentPath); 
  return true;
};

Проблема в том, что fs.mkdirSync() несоздайте полный путь с указанными вами родительскими каталогами (обратите внимание, что вы используете mkdir -p на оболочке для создания всей структуры папок) -> checkout Как создать полный путь с помощью узла fs.mkdirSync? для получения дополнительной информации.

То, что вы можете сделать, это использовать модуль типа fs-extra и использовать его функцию ensureDir, которая создаст соответствующие родительские каталоги (если они еще не существуют)) перед вызовом функции .mv().Или, если ваша версия узла>> 10, используйте встроенную опцию {rescursive:true}, которую вы можете передать fs.mkdirSync.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...