Ограничивающий код идентификации загрузки усложняет написание компонентов темы, использующих загруженные ресурсы

Всем привет,

Недавно я создал компонент темы для Discourse (GitHub - Beholder-Vision/discourse-insert-model-3d: A Discourse theme component for adding 3D models to topics · GitHub), который позволяет администраторам Discourse включать загрузку и отображение 3D-моделей на своих форумах.

Сначала всё работало хорошо, но затем я получил сообщение о том, что некоторые загруженные модели исчезли. Проверив свой собственный форум, я обнаружил, что загруженные ресурсы (3D-модели и постерные изображения) также были удалены: Insert Model 3D - #2 by patrickemin.

Изучив документацию (Understanding Uploads, Images, and Attachments), я предположил, что загруженные ресурсы останутся в безопасности, поскольку на них есть ссылки в постах. Однако после дополнительного исследования я нашёл этот код: discourse/app/models/post.rb at 03bb43f7468d3aa6e73bba0805193ae50c7ec2d5 · discourse/discourse · GitHub, который, по-видимому, отвечает за идентификацию загруженных файлов на сервере. Судя по всему, загруженный файл считается ссылочным в посте только в том случае, если на него есть ссылка в одном из ограниченного набора HTML-тегов. Таким образом, загруженный файл будет распознан, если на него есть ссылка через атрибут href элемента , но не если ссылка находится в атрибуте src элемента (именно такой элемент добавляет мой новый компонент темы).

Может ли кто-то, кто хорошо знаком с этим кодом, подтвердить, правильно ли я всё понял? Если моё понимание верно, то создатели компонентов тем могут помечать ресурсы как загруженные, генерируя скрытую ссылку , указывающую на ресурс. Однако было бы очень полезно, если бы в документации (Understanding Uploads, Images, and Attachments) было обновлено описание, чтобы подчеркнуть этот нюанс.

Большое спасибо,
Алан

3 лайка

Ваши параметры и src поступают из JSON-парсинга, поэтому автоматизация этого процесса кажется сложной (мягко говоря).

Мне кажется, что на фундаментальном уровне это запрос к API «жестко прикрепить» загрузку к посту и пометить её таким образом, чтобы она никогда не удалялась.

Это, в свою очередь, открывает шлюзы для других проблем (где я могу увидеть, какие загрузки жестко прикреплены? Какие существуют ограничения?).

Тем не менее, жесткое прикрепление кажется единственным чистым способом решить эту проблему.

Скрытая ссылка действительно сработает как временное решение.

Я перенесу это в запрос на новую функцию, поскольку текущее поведение соответствует дизайну, но API не облегчает вам жизнь в данном случае.

Я уведомлю команду dev-xp, у которой могут быть дополнительные соображения по этому поводу.