React Js получает изображение с URL-адреса AWS s3

У меня есть 7URL-адресов, из которых иногда 3-4 являются действительными загружаемыми изображениями.. поэтому перед визуализацией изображений с помощью функции getPhotosList я проверяю действительный URL-адрес загрузки с помощью функции CheckValidImages.

      const CheckValidImages = async () => {
if (!props.location.state.isVideoContent) {
  let getRecipeDetailWorkflowRead = {props.location.state.recipeDetailWorkflowRead};
  let recipePhotos = [];
  let sequence = 0;
  for (var i = 0; i < getRecipeDetailWorkflowRead.recipePhotos.length; i++) {
    const img = new Image();
    img.src = getRecipeDetailWorkflowRead.recipePhotos[i].path;
    await img
      .decode()
      .then(() => {
        getRecipeDetailWorkflowRead.recipePhotos[i].sequence = sequence + 1;
        recipePhotos.push(getRecipeDetailWorkflowRead.recipePhotos[i]);
        sequence = sequence + 1;
      })
      .catch((encodingError) => {});
  }
  getRecipeDetailWorkflowRead.recipePhotos = recipePhotos;
  setRecipeDetailWorkflowRead(getRecipeDetailWorkflowRead);
  setImageLoader(false);
} else {
  setRecipeDetailWorkflowRead(
    props.location.state.recipeDetailWorkflowRead
  );
}
};

const getPhotosList = () => {
if (recipeDetailWorkflowRead.recipePhotos !== undefined) {
  console.log(recipeDetailWorkflowRead.recipePhotos);
  var listItems = recipeDetailWorkflowRead.recipePhotos.map((el, i) => {
    return (
      <div
        key={i}
        className={['mr-1', Classes.imagediv].join(' ')}
        draggable='true'
        onDragEnd={dragEnd}
        onDragStart={dragStart}
        data-item={JSON.stringify(el)}
      >
        <img
          className={i === 0 ? Classes.card_img_first : Classes.card_img}
          src={el.path}
          alt='cardimg'
        />
        <div className={Classes.card_body}>
          <input
            type='text'
            name='mediaDescription'
            value={el.mediaDescription || ''}
            onChange={(event) => onAltTextChangehandler(event, i)}
            placeholder='Alt text'
            className={['form-control', Classes.img_alt_text].join(' ')}
          />
        </div>
      </div>
    );
  });
  return (
    <div
      onDragOver={dragOver}
      className={['d-flex', 'flex-row', Classes.contain].join(' ')}
    >
      {listItems}
    </div>
  );
}
};

В функции CheckValidImage getRecipeDetailWorkflowRead.recipePhotos[i].path есть путь к изображению, который я проверяю, является ли он действительным или нет. Теперь, если изображение допустимо, я пытаюсь вставить его в recipePhotos и, наконец, после проверки всех путей к изображениям, я обновляю состояние setRecipeDetailWorkflowRead.

Но это кажется трудоемким занятием, если размер изображения больше. Может ли кто-нибудь предложить какой-либо другой альтернативный вариант, где я могу быстрее получить изображения.

1 ответ

Я не знаю, как реагировать, но я думаю, что с помощью fetch вы можете выполнить запрос «HEAD» и проверить заголовки, не загружая содержимое:

Другие вопросы по тегам