Подскажите пожалуйста где на стороне сервера формируется - 0/img/entity/hash/DocumentFile/Data/c9f2d9a4-4810-4a61-a2b2-ebabf04d1b9f
Мне необходимо вручную положить туда данные, но не могу понять где именно это сделать. Спасибо
Нравится
Она формируется при помощи Terrasoft.ImageUrlBuilder.getUrl(config), почитать об этом механизме можно тут.
Вызовы этой функции для детали файлов раздела реализованы в FileDetailV2 и ImageListViewModel:
getExtensionImageUrl: function(id) { return this.Terrasoft.ImageUrlBuilder.getUrl({ source: this.Terrasoft.ImageSources.ENTITY_COLUMN, params: { schemaName: "FileExtension", columnName: "Data", primaryColumnValue: id } }); }, fillExtensionsIcons: function(collection, callback) { const extensions = this.get("Extensions"); this.Terrasoft.SysSettings.querySysSettingsItem("FileDetailDefaultIcon", function(response) { const defaultIconUrl = response ? this.getExtensionImageUrl(response.value) : this.Terrasoft.ImageUrlBuilder.getUrl(this.get("Resources.Images.DefaultIcon")); const defIconId = this.Terrasoft.generateGUID(); extensions.add(defIconId, { "Extension": "default", "Url": defaultIconUrl }); collection.each(function(item) { const extensionId = item.get("Id"); const extensionName = item.get("Name").toLowerCase(); const extensionUrl = this.getExtensionImageUrl(extensionId); if (extensionName !== "default") { extensions.add(extensionId, { "Extension": extensionName, "Url": extensionUrl }); } }, this); if (callback) { callback.call(this); } }, this); },
getImageUrl: function(entitySchemaName, Id) { if (this.isEntityLink) { var entity = this.getEntityLinkCacheById(Id); return Terrasoft.ImageUrlBuilder.getUrl({ source: Terrasoft.ImageSources.SYS_SETTING, params: { r: this.getSysSettingImageByEntityName(entity.entityName) } }); } else { return Terrasoft.ImageUrlBuilder.getUrl({ source: Terrasoft.ImageSources.ENTITY_COLUMN, params: { schemaName: entitySchemaName, columnName: "Data", primaryColumnValue: Id } }); } },
В одном случае генерируется миниатюра файла-изображения, в другом — стандартная иконка для известного типа файла, хранящаяся в таблице FileExtension. Например, для DOCX будет URL вида:
/0/img/entity/hash/FileExtension/Data/938104a8-be24-48b6-a55a-d62adf2e4119
Зверев Александр,
Это все мне понятно. можете подсказать пожалуйста в какой момент картинка попадает в эту папку, на каком уровне? Это какое-то локальное хранилище? виртуальный путь? Как туда вручную положить картинку??
На уровне ядра. Клиентский ImageUrlBuilder.js формирует URL и серверные Global.asax.cs и SchemaResourcesRouter.cs, которые преобразуют виртуальный путь в запрос к terrasoft.axd с нужными параметрами. Вам нужно переделывать не саму логику размещения, а чтобы в конфигурации к нему обращались в нужное время с нужными параметрами, как на детали файлов есть одна логика для картинок и другая — для иконок типов. Картинка, как видно по URL, сначала берётся из нужной записи нужной таблицы базы, при следующих считываниях по этому же URL должна кэшироваться.
Зверев Александр,
Просто у меня картинки хранятся в файловой системе, а в базе поле Data пустое, вот я и ищу способ решить проблему с предпросмотром. Что можете посоветовать в моем случае??
Можно хранить в файловой системе полноразмерные картинки, а в базе (в той же таблице или в специально сделанной) хранить миниатюры, с которыми и будет работать этот сервис.