Передача и получение файла post запросом
Добрый день. Передаю через http сервис png изображение, в базе, куда передаю файл, Запрос.ПолучитьТелоКакСтроку() = "--aad02f12bf374e5ca34ae62b210cafd7
Content-Disposition: form-data; name="image"
/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAcHBwcIBwgJCQgMDAsMDBEQDg4Q ERoS
FBIUEhonGB0YGB0YJyMqIiAiKiM+MSsrMT5IPDk8SFdOTldtaG2Pj8ABBwcH BwgH
CAkJCAwMCwwMERAODhARGhIUEhQSGicYHRgYHRgnIyoiICIqIz4xKysxPkg8 OTxIe1z/9k=
--aad02f12bf374e5ca34ae62b210cafd7--
". Подскажите, пожалуйста, как получить файл в базе, к которой делается запрос? Код формирования запроса
Content-Disposition: form-data; name="image"
/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAcHBwcIBwgJCQgMDAsMDBEQDg4Q
FBIUEhonGB0YGB0YJyMqIiAiKiM+MSsrMT5IPDk8SFdOTldtaG2Pj8ABBwcH
CAkJCAwMCwwMERAODhARGhIUEhQSGicYHRgYHRgnIyoiICIqIz4xKysxPkg8
--aad02f12bf374e5ca34ae62b210cafd7--
". Подскажите, пожалуйста, как получить файл в базе, к которой делается запрос? Код формирования запроса
Хост = "localhost";
ИмяМетода = "/my_publication/hs/exchange/PostFile/";
Соединение = Новый HTTPСоединение(Хост, ,Пользователь, Пароль);
ИмяФайла = "C:\test.jpeg";
ДД = Новый ДвоичныеДанные(ИмяФайла);
Строка64 = Base64Строка(ДД);
имяФайлаОтправки = ПолучитьимяВременногоФайла("txt");
boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
ЗаписьТекста = Новый ЗаписьТекста(имяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, Ложь);
ЗаписьТекста.ЗаписатьСтроку("--" + boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""image""" + Символы.ПС);
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.ЗаписатьСтроку(Строка64);
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--");
ЗаписьТекста.Закрыть();
ФайлОтправки = Новый Файл(имяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "multipart/form-data, boundary=" + boundary);
Заголовки.Вставить("Content-Lenght", РазмерФайлаОтправки);
ЗапросHTTP = Новый HTTPЗапрос(ИмяМетода, Заголовки);
ЗапросHTTP.УстановитьИмяФайлаТела(имяФайлаОтправки);
Ответ = Соединение.ОтправитьДляОбработки(ЗапросHTTP);
ПоказатьПо теме из базы знаний
- Передача файлов и данных на веб-сервер средствами 1С:Предприятие 8.X методом POST
- Отправка HTTP запроса в УТМ ЕГАИС. Код функции + обработка.
- Консоль запросов 9000
- Собираем образ виртуальной машины с PostgreSQL и платформой 1С. Цикл "Многопоточный CI для 1С c Packer, Vagrant и Jenkins", часть 2
- Тестирование API 1C Postman
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) так я разобраться и хочу, я ж не прошу готовый код скинуть, мне статьи какие-нибудь полезные, где можно почитать подробно все, все что я смог найти так это отправка файлов через http, про получение данных на стороне другой базы я ничего не нашел. Возможно плохо искал
(3) Взять из ответа строку
/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAcHBwcIBwgJCQgMDAsMDBEQDg4Q ERoS
FBIUEhonGB0YGB0YJyMqIiAiKiM+MSsrMT5IPDk8SFdOTldtaG2Pj8ABBwcH BwgH
CAkJCAwMCwwMERAODhARGhIUEhQSGicYHRgYHRgnIyoiICIqIz4xKysxPkg8 OTxIe1z/9k=
Методом Base64Значение() от этой строки у тебя будут ДвоичныеДанные картинки.
/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAcHBwcIBwgJCQgMDAsMDBEQDg4Q
FBIUEhonGB0YGB0YJyMqIiAiKiM+MSsrMT5IPDk8SFdOTldtaG2Pj8ABBwcH
CAkJCAwMCwwMERAODhARGhIUEhQSGicYHRgYHRgnIyoiICIqIz4xKysxPkg8
Методом Base64Значение() от этой строки у тебя будут ДвоичныеДанные картинки.
(4) у меня с этим и есть проблема, при Base64Значение(СтрокаBase64) двоичные данные пустые
BoundaryМассив = СтрРазделить(Запрос.Заголовки["Content-Type"], "=");
BoundaryЗначение = BoundaryМассив[BoundaryМассив.ВГраница()];
СтрокаBase64 = СтрЗаменить(Запрос.ПолучитьТелоКакСтроку(), "--" + BoundaryЗначение + "--", "");
СтрокаBase64 = СтрЗаменить(СтрокаBase64, "--" + BoundaryЗначение, "");
СтрокаBase64 = СтрЗаменить(СтрокаBase64, "Content-Disposition: form-data; name=""image""", "");
НомерСимвола = 1;
Пока Истина Цикл
ЗначениеСимвола = Сред(СтрокаBase64, НомерСимвола, 1);
Если ЗначениеЗаполнено(ЗначениеСимвола) Тогда
Прервать;
Иначе
СтрокаBase64 = Прав(СтрокаBase64, СтрДлина(СтрокаBase64) - 1);
КонецЕсли;
КонецЦикла;
НомерСимвола = СтрДлина(СтрокаBase64);
Пока Истина Цикл
ЗначениеСимвола = Сред(СтрокаBase64, НомерСимвола, 1);
Если ЗначениеЗаполнено(ЗначениеСимвола) Тогда
Прервать;
Иначе
СтрокаBase64 = Лев(СтрокаBase64, СтрДлина(СтрокаBase64) - 1);
КонецЕсли;
НомерСимвола = СтрДлина(СтрокаBase64);
КонецЦикла;
Показать
(6) то двоичные данные нормальные
Смотрите что формируется на этом этапе:
в конце так же один символ = exgVDuwessk+AnabcACWfBvQQ0DcUHEBqXWZn0+mhtsgHn9ICbhzDVdPCvqPjzK6
wk1GrxMJNQ+kRe1z/9k=
в этом же коде если вызываю метод wk1GrxMJNQ+kRe1z/9k=
ДД = Новый ДвоичныеДанные(ИмяФайла);
Строка64 = Base64Строка(ДД);
ДД = Base64Значение(Строка64 );
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот