Обработка частных изображений S3 с контентом, созданным пользователем

Привет, ребята, мне нужна помощь.

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

В настоящее время проект состоит из тонкого интерфейса, серверной части Kotlin и хранилища s3.

В базе данных у меня есть таблица «paper» и таблица «paper_entries». В «paper_entries» есть столбец «content», который представляет собой поле, которое они могут редактировать во внешнем интерфейсе с помощью редактора контента «tiptap», и оно сохраняется в формате HTML.

HTML обрабатывается с помощью «jsoup» на серверной стороне перед помещением в БД. Все идет нормально.

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

  1. FE запросил URL-адрес загрузки на s3 из BE
  2. загружает изображение в s3
  3. FE отправляет обновленный контент в BE

*id = имя объекта на s3

Теперь начинается большая борьба.... Поскольку в документе может быть несколько записей (предположим, 10-100), и каждая запись может содержать X изображений, мне нужно сгенерировать подписанные URL-адреса для каждой записи. Для замены я использую регулярное выражение, чтобы найти целевой идентификатор, затем создаю подписанный URL-адрес и устанавливаю его как src. ()

Именно здесь я заметил значительное влияние на производительность при получении данных. От ~30мс до ~600мс. Замену делал в БЭ.

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

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

Есть ли более приятные решения? Я много гуглил, чтобы найти похожие условия, но не смог.

Короче говоря, я попробовал:

- Заменить контент в BE

Довольно большое влияние на производительность: от ~30 мс до ~600 мс. (Может быть, я сделал что-то ужасно неправильно???) Я использовал регулярное выражение:/<img\W?(src=\".*\")?(id=\"([a-zA-Z0-9-]+)\"\Wwidth=\"\d+\"\W?height=\"\d+\")\W?>/gm

- Заменить контент в FE

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

- Пытался создать подписанный URL-адрес во внешнем интерфейсе.

Пока что я здесь застрял, потому что существующие библиотеки, такие как AWS и minio, на самом деле не являются инструментами для использования в браузере.

0 ответов

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