Создание общедоступного URL-адреса изображения после загрузки файла (Javascript, React)

#javascript #reactjs #file-upload #fetch

#javascript #reactjs #загрузка файла #извлечение

Вопрос:

Я использую следующий код для загрузки, отображения и отображения источника изображения пользователю:

 import React, { useState } from "react";
import "./styles.css";

export default function App() {
  const [file, setFile] = useState(null);

  const handleChange = function loadFile(e) {
    if (e.target.files.length > 0) {
      const file = URL.createObjectURL(e.target.files[0]);
      setFile(file);
    }
  };
  return (
    <div className="App">
      <input type="file" onChange={handleChange} id="upload" accept="image/*" />
      <label htmlFor="upload">
        <div>
          <img alt="uploadImage" src={file} />
        </div>
      </label>
    </div>
  );
}
 

Здесь работает песочница.

Проблема

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

С текущим кодом после загрузки изображение source обычно выглядит примерно так: blob:https://fp0tr.csb.app/48a669d9-f9e2-4ea3-811f-c001ac158a1a я знаю, что это результат метода URL.createObjectURL() и ссылается только на локальный файл.

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

Существует ли метод, который можно использовать для создания общедоступного URL-адреса изображения, который будет существовать дольше, чем срок службы страницы / документа, в который он был загружен?Необходимо ли использовать сторонний сервис для такого типа функциональности?

РЕДАКТИРОВАТЬ: другой пользователь предоставил информацию о возможном использовании веб-службы для достижения этой цели, однако, без особого контекста относительно того, как это может выглядеть, помимо использования fetch API. — Надеюсь, кто-нибудь сможет уточнить.

Ответ №1:

Вы нигде не загружаете изображение.

Вы просто читаете файл и полностью преобразуете его в URL-адрес данных на клиенте.

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

Нет необходимости использовать сторонний сервис. Вы можете написать свой собственный.

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

1. Спасибо, какой веб-сервис вы бы порекомендовали? Если вы можете предоставить краткий пример или ссылку, в которых более подробно изложено, я был бы очень признателен!