Передача файла с клиента на сервер и обратно.
В связи с новым подходом в программировании на платформе 8.2 возникла необходимость передачи данных между клиентом и сервером при этом прямая передача в виде параметров имеет ряд ограничений. И тогда был введен объект «Временное хранилище».
Чем полезно временное хранилище:
- Не надо создавать объекты в конфигурации
- Доступно и с сервера и с клиента
- Можно записать любой объект
Временное хранилище это не объект конфигурации, а объект платформы поэтому для разработчика он выглядит как черный ящик. Можно туда положить что-то получив псевдоним(адрес) и получить из него что-то указав псевдоним(адрес). Но узнать что находится во временном хранилище и сколько нельзя. В ниже рассмотренных примерах помещение в хранилище происходит на клиенте, а чтение на сервере. Хотя можно передавать данные и в обратном направлении.
Синтаксис работы с хранилищем простой:
Передав параметром, данные которые хотим поместить(Посылка) и УникальныйИдентификатор получаем Адрес, по которому потом можно будет обратиться. Причем передаваемый идентификатор не является получаемым в последствии адресом. Вместо идентификатора можно передать строку Адреса, по которому и будет помещено наше значение, но это не любая строка! Строка Адреса выглядит примерно вот так «e1cib/tempstorage/ae5c5472-0266-4892-9073-20392dd5a6a6».
УникальныйИдентификатор = Новый УникальныйИдентификатор;
Адрес = ПоместитьВоВременноеХранилище(Посылка, УникальныйИдентификатор);
УникальныйИдентификатор может быть как новый так и существующей формы, в последнем случае значение в хранилище будет храниться пока существует форма. Если не передать уникальный идентификатор, то при следующем серверном вызове значение уже будет удалено.
Адрес = ПоместитьВоВременноеХранилище(Посылка);
ПрочитатьНаСервере(Адрес); // процедура на сервере которая читает из хранилища с помощью метода ПолучитьИзВременногоХранилища()
ПрочитатьНаСервере(Адрес); // при этом вызове серверной процедуры значения в хранилище уже не будет.
Чтобы получить из хранилища нужно только указать адрес:
Посылка = ПолучитьИзВременногоХранилища(Адрес);
Также можно удалить помещенный объект, используя адрес
УдалитьИзВременногоХранилища(Адрес);
Если помещаемые данные не являются объектами конфигурации, то для того чтобы их поместить нужно перевести в доступный тип - «ДвоичныеДанные»
Помещение в хранилище
ДвоичДанные = Новый ДвоичныеДанные(ПутьКФайлу);
Адрес = ПоместитьВоВременноеХранилище(ДвоичДанные, УникальныйИдентификатор);
Здесь мы сначала преобразуем файл в формат двоичных данных и только потом помещаем их в хранилище
Чтение из хранилища
В интернете есть множество примеров как на сервере записать полученные данные в базу, поэтому ниже приводится другой пример, когда файл полученный на сервере открывается для работы. В качестве такого файла используется XML.
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ИмяВременногоФайлаXML = ПолучитьИмяВременногоФайла("xml"); // например был помещен XML
ДвоичныеДанные.Записать(ИмяВременногоФайлаXML);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяВременногоФайлаXML);
ЧтениеXML.Прочитать();
// Дальше стандартная работа с XML
Если мы имеем дело с файлами, то может оказаться удобным метод ПоместитьФайл. Он преобразует файл в двоичные данные и записывает их во ВременноеХранилище. При этом параметром можно настроить открытие диалогового окна для выбора файла. Сделаю оговорку, этот метод нельзя использовать на сервере.
ПоместитьФайл(Адрес,,,Истина,ЭтаФорма.УникальныйИдентификатор);
В параметре Адрес, можно указать Адрес в который нужно записать файл, если нужен новый адрес, то нужно передать пустую строку.
Адрес = "";
ПоместитьФайл(Адрес,,,Истина,ЭтаФорма.УникальныйИдентификатор);
Истина – открывает окно для выбора папки и имени файла, при значении Истина есть возможность открыть файл."КопияФайла.xml" – Имя файла под которым будет сохранен файл.Адрес – это адрес в хранилище,ПолучитьФайл(Адрес,"Копияфайла.xml" , Истина);Чтобы сохранить файл из временного хранилища на Клиенте можно использовать метод
Для получения файла используется метод
ПолучитьФайл(Адрес,"Копияфайла.xml" , Истина);