Как обрабатывать выборку изображения, которое еще не существует в JavaScript при использовании LiipImagineBundle - PullRequest
0 голосов
/ 06 мая 2019

Я хотел бы проверить, существует ли файл в NodeJS.

Я видел это решение в другом посте:

const tryRequire = (path) => {
  try {
   return require(`${path}`);
  } catch (err) {
   return null;
  }
};

Но действительно ли это хорошо?решение?

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

Как я могу это сделать?


РЕДАКТИРОВАТЬ:

Я подробно объясняю свою проблему.

Я нахожусь в проекте Symfony and React. Я новичок в React.

Есть возможность загружать изображения в чат.При загрузке изображения я вызываю маршрут Symfony.В этом маршруте я использую пакет Liip Imagine.Поэтому я делаю что-то вроде этого для кэширования изображения:

public function new(Request $request, SerializerInterface $serializer): Response
{
    $rewardImagePath = $this->uploaderHelper->asset($media, 'imageFile');
        if($rewardImagePath) {
            $cacheImagePath = $this->cacheManager->getBrowserPath($rewardImagePath, 'live_feed_message');
        }
}

Проблема в том, что функция getBrowserPath выдает мне URL будущего кэшированного файла.Но создание файла занимает значительное время (например, 5/10 секунд).Итак, у меня передо мной новое сообщение чата, но на самом деле связанный файл не существует на сервере.Таким образом, он отображает сообщение без изображения.

По некоторым неизвестным причинам, если я делаю какое-то время, файл существует в этом контроллере, у меня есть тайм-аут, и файл никогда не создается.Вот почему я пытаюсь проверить существование файла на стороне реакции.

1 Ответ

0 голосов
/ 06 мая 2019

вы можете попробовать:

function doesFileExist(urlToFile) {
var xhr = new XMLHttpRequest();
xhr.open('HEAD', urlToFile, false);
xhr.send();

if (xhr.status == "404") {
    return false;
} else {
    return true;
}
}
...