Лучший способ загрузки изображений в плагин/тему?

Я хотел бы загружать иконки изображений как часть моей темы или плагина (я использую оба варианта). Затем я буду ссылаться на них из компонента Glimmer в плагине. Мне нужно получить строковый URL-адрес расположения изображения, так как я отправляю его на другой сервер в AJAX-запросе. (Удаленный сервер встраивает иконки в QR-коды, если вам интересно.)

Если я помещаю свои изображения в about.json в теме, они не размещаются по детерминированному расположению — вместо этого в URL появляется хэш. Поэтому я не знаю, как на них ссылаться вне CSS, не говоря уже о плагине.

Если я помещаю свои изображения в настройку администратора для плагина как uploaded_image_list, расположение также недетерминировано, и более того, они оказываются в массиве без читаемого человеком имени/тега/алиаса, по которому можно было бы на них ссылаться.

// console.log(this.siteSettings.county_fence_available_icons):
/uploads/default/original/1X/1764ca1c70c7f4f7f01da26e702639fd8cfe2bf4.jpeg|/uploads/default/original/1X/b16cecd70e4d25abdf06a8b6135ec126d2c6ce2d.jpeg|/uploads/default/original/1X/b4c049256c1068e531e43f1622ada78c5b2070b3.jpeg|/uploads/default/original/1X/4aa457c9cd939e178eb251682a4438cc027b96e9.jpeg

Так существует ли способ загрузки изображений, либо в тему, либо в плагин, чтобы они оказывались по детерминированному URL?

Этот вопрос также касается любых других ресурсов, которые пользователь захочет загрузить. И раздел assets в about.json, и функция register_asset, используемая в plugin.rb, выглядят так, будто они должны поддерживать загрузку файлов других типов, кроме шрифтов, но если эти файлы загружаются, я не имею представления, где они находятся.

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

Хотя вы не можете задать URL, он всё же детерминирован, поскольку формируется на основе SHA1-хэша файла.

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

/uploads/<имя_экземпляра>/original/1X/1764ca1c70c7f4f7f01da26e702639fd8cfe2bf4.jpeg

или

/uploads/<имя_экземпляра>/original/2X/1/1764ca1c70c7f4f7f01da26e702639fd8cfe2bf4.jpeg

или

/uploads/<имя_экземпляра>/original/3X/1/7/1764ca1c70c7f4f7f01da26e702639fd8cfe2bf4.jpeg

или

/uploads/<имя_экземпляра>/original/4X/1/7/6/1764ca1c70c7f4f7f01da26e702639fd8cfe2bf4.jpeg

(конкретный вариант зависит от количества уже выполненных загрузок см. код).

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

Вы можете обратиться к инициализаторам плагина Discourse Math:

Ресурсы в директории /public будут доступны под именем плагина. Эти ресурсы вызываются напрямую, без необходимости регистрации в plugin.rb.