Коллеги, хочу реализовать загрузку изображений в карточку документа. Нужно, чтобы пользователь мог выбрать файл через кнопку, а потом это изображение сохранялось в базе.
Нашел несколько вариантов, но не нравится, что у некоторых решений приходится работать с внешними файлами, а я хочу хранить картинки в самой базе. Кто как делает?
Я для загрузки картинок создаю на форме реквизит "Изображение" и кнопку "Загрузить". И код такой:
Показать спойлер &НаКлиенте Процедура Загрузить(Команда) ООЗ = Новый ОписаниеОповещения("ОбработкаВыбораФайла", ЭтотОбъект); ПараметрДиалога = Новый ПараметрыДиалогаПомещенияФайлов("Выбор изображения",Ложь,"Изображения (*.jpg,*.png)|*.jpg;*.png"); НачатьПомещениеФайлаНаСервер(ООЗ,,,,ПараметрДиалога,УникальныйИдентификатор); КонецПроцедуры
&НаКлиенте Процедура ОбработкаВыбораФайла(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт Если ОписаниеПомещенногоФайла <> Неопределено Тогда Если ОписаниеПомещенногоФайла.ПомещениеФайлаОтменено Тогда Возврат; КонецЕсли; Модифицированность = Истина; Изображение = ОписаниеПомещенногоФайла.Адрес; КонецЕсли; КонецПроцедуры
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Изображение = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"Фото"); КонецПроцедуры
&НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ЭтоАдресВременногоХранилища(Изображение) Тогда ТекущийОбъект.Фото = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Изображение)); КонецЕсли; КонецПроцедуры
nick86, иногда нужно, чтобы картинка была привязана к документу и никуда не пропала, если, например, изменится структура папок на сервере.
Я делал через временное хранилище, а потом сохранял в ХранилищеЗначения.
А валидацию на формат и размер можно накинуть так:
Показать спойлер
&НаКлиенте
Процедура ОбработкаВыбораФайла(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт
Если ОписаниеПомещенногоФайла <> Неопределено Тогда
Если ОписаниеПомещенногоФайла.ПомещениеФайлаОтменено Тогда
Возврат;
КонецЕсли;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ОписаниеПомещенногоФайла.Адрес);
Изображение = Новый Картинка(ДвоичныеДанные);
Если НЕ (Изображение.Ширина() = 500ИЛИ Изображение.Высота() = 250 ИЛИ Изображение.Формат() = ФорматКартинки.PNG) Тогда
Сообщить("Формат изображения " + Строка(Изображение.Формат()) + ". Требуется PNG!");
Сообщить("Ширина изображения " + Строка(Изображение.Ширина()) + ". Требуется 500!");
Сообщить("Высота изображения " + Строка(Изображение.Высота()) + ". Требуется 250!");
Возврат;
КонецЕсли;
Модифицированность = Истина;
Картинка = ОписаниеПомещенногоФайла.Адрес;
КонецЕсли;
КонецПроцедуры
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс
Для создания новых тем нужно войти или зарегистрироваться