Передача двоичных данных с помощью веб-сервиса
Объект метаданных "Веб-сервис" предназначен для обмена данными посредством веб-технологий, а если быть точнее - по протоколу HTTP. Как же осуществляется передача двоичных данных в мире веб-разработки? Для этого используется кодирование двоичных данных под названием base64 (64 — это число символов в алфавите кодирования, из которого формируется конечный буквенно-цифровой текст на основе латинского алфавита).
Закодированные двоичные данные выглядят примерно так:
Платформа 1С в своем арсенале имеет имеет парочку функций, которые умеют кодировать двоичные данные в base64:
Если метод возвращает значение (в нашем случае это файл), то нужно указать тип возвращаемого значения, выберем тип String пространства имен http://www.w3.org/2001/XMLSchema, ведь base64 это строка.
Напишем программный код для метода:
Но можно и по другому, для этого находим информацию в синтакс-помощнике о типе ДвоичныеДанные и смотрим, может ли данный тип сериализоваться в объект XDTO, если да, то какому типу соответствует.
Из рисунка 3 видно, что тип ДвоичныеДанные сопоставим с типами base64Binary и hexBinary, которые относятся к пространству имен http://www.w3.org/2001/XMLSchema. Далее указываем для метода тип возвращаемого значения (см. рисунок 2) из списка сопоставимых. Теперь в методе можно возвращать двоичные данные без явного кодирования в base64, система это сделает за вас.
Принимающей стороне остается декодировать строку формата base64 в двоичные данные.
Закодированные двоичные данные выглядят примерно так:
TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0
Платформа 1С в своем арсенале имеет имеет парочку функций, которые умеют кодировать двоичные данные в base64:
- Base64Строка - имеет один входящий параметр типа ДвоичныеДанные, возвращает строку, закодированную по алгоритму base64.
- XMLСтрока - так же имеет один входящий параметр, который может принимать значение типа ДвоичныеДанные и возвращать строку в формате base64, следует использовать для создания XML.
![]() |
Рисунок 1. Метод веб-сервиса GetFacsimile |
Если метод возвращает значение (в нашем случае это файл), то нужно указать тип возвращаемого значения, выберем тип String пространства имен http://www.w3.org/2001/XMLSchema, ведь base64 это строка.
![]() |
Рисунок 2. Тип возвращаемого значения метода |
Функция GetFacsimile(Number)
ФайлКакBase64 = "";
НомерЗаказаКлиента = СокрЛП(Number);
ЗаказКлиента = Документы.ЗаказКлиента.НайтиПоНомеру(НомерЗаказаКлиента);
Если Не ЗаказКлиента.Пустая() Тогда
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(ЗаказКлиента);
СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь);
ПараметрыПечати.Вставить("ОтображатьФаксимиле", Истина);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
ТабличныйДокумент = Обработки.ПечатьСчетовНаОплату.СформироватьПечатнуюФормуСчетНаОплату(
СтруктураТипов,
Новый СписокЗначений,
ПараметрыПечати);
ТабличныйДокумент.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.PDF);
ДвоичныеДанныефайла = Новый ДвоичныеДанные(ИмяВременногоФайла);
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
КонецПопытки;
ФайлКакBase64 = Base64Строка(ДвоичныеДанныефайла);
Иначе
ЗаписьЖурналаРегистрации(
"Документы.ЗаказКлиента.НайтиПоНомеру",
УровеньЖурналаРегистрации.Предупреждение,
Метаданные.Документы.ЗаказКлиента,
,
"Не найден счет факсимиле по номеру заказа клиента: " + НомерЗаказаКлиента + ".");
КонецЕсли;
Возврат ФайлКакBase64;
КонецФункции
Но можно и по другому, для этого находим информацию в синтакс-помощнике о типе ДвоичныеДанные и смотрим, может ли данный тип сериализоваться в объект XDTO, если да, то какому типу соответствует.
![]() |
Рисунок 3. Дополнительно описание типа ДвоичныеДанные |
Функция GetFacsimile(Number)
// Создание файла . . .
ДвоичныеДанныефайла = Новый ДвоичныеДанные(ИмяВременногоФайла);
Возврат ДвоичныеДанныефайла ;
КонецФункции
Принимающей стороне остается декодировать строку формата base64 в двоичные данные.
Комментарии
Отправить комментарий