передача файла в 1С через http сервис 1с #758202


#0 by poyson
Собственно проблема в следующем... есть в конфигурации http-сервис. который генерит следующий текст html: </form> Этот код позволяет выбрать, загрузить и передать в 1с файл в теле запроса. В полученной html форме народ выбирает файл и нажимает кнопку отправить... Но проблема в следующем... Передача файлов и др. бинарной информации возможна только с применением кодирования "multipart/form-data" а это кодирование предполагает хранение заголовков запроса и файла единым текстом с использованием разделителя. Http сервисы типа Php разбирают такой текст без проблем - стандартными языковыми структурами. Мой вопрос - как это сделать в 1С?
#1 by Fragster
только разбирать руками, инфа 100%
#2 by poyson
Проблема в скупости работы 1с с бинарными данными... В ответе присутсвуют как текстовые разделители, так и бинарники... думаю ничего не выдет. придется отказаться от мысли реализовать загрузку прямо в 1с через вэб форму... очень жаль.
#3 by Serginio1
#4 by Serginio1
#5 by Serginio1
#6 by Fragster
не все так плохо. в принципе через текстовый документ можно реализовать для небольших (до нескольких мегабайт, возможно десятков) файлов нормальный разбор
#7 by vhl
из Base64 не можешь двоичные данные что-ли получить?
#8 by Fragster
там же base64 + разделители практически
#9 by Serginio1
#10 by Serginio1
Всегда можно использовать и с await нужно добавить Result. Например preview=HttpClient.GetByteArrayAsync(Данные.url).Result;
#11 by Serginio1
#12 by vhl
горшочек, не вари1
#13 by poyson
Проблема в общем как раз то в том, что в теле ответа есть и заголовки с элементами формы и их значениями и собственно бинарные данные ... Для начала надо отделить мух от котлет... И вот тут проявляются проблемы работы с двоичными данными... При чем тут "Convert.ToBase64String(preview)"?
#14 by Serginio1
Convert=Врап.ПолучитьТип("System.Convert"); преобразует byte[] в Base64String
#15 by vhl
ну так отрежь по ---boundary, в чем проблема?
#16 by poyson
Отрезать не проблема. Но во тут и начинаются проблемы работы с бинарниками... часть символов 1с не видет(видимо те, у котрых размеры и коды 0) и не знает... они теряются и в итге сохраненный результат просто не открывается... хотя размеры совпадают с исходниками 1 в 1.
#17 by poyson
проблема как раз в том, что в ответе присутствуют не только бинарки... после такого преобразования не получится убрать по разделителю из ответа секции с служебные секции
#18 by Serginio1
#19 by vhl
ты в google набрал "Http Multipart Form" и теперь тупо копируешь сюда все ссылки подряд?
#20 by Serginio1
Тупо наьираешь. Умно выбираешь. Ему подходит multipartFormDataContent.Add using (var client = new HttpClient)                     {                         using (var multipartFormDataContent = new MultipartFormDataContent)                         {                             foreach (var keyValuePair in values)                             {                     }
#21 by poyson
Есть похожий варианты реализации на дельфи... Интересно -  заработает на 1С...?
#22 by Serginio1
Так заметь Контенты разнве бывают
#23 by poyson
Мне не надо добавлять в тело запроса бинарники... Это как раз у меня есть... Мне нужно их оттуда вытащить...
#24 by Serginio1
#25 by poyson
А как это в 1с использовать?
#26 by Serginio1
#27 by poyson
Спасибо в любом случае... Полезная вещь, надо попробовать...
#28 by Serginio1
Ты можешь использовть динамическую обертку событий. Например по ссылке ессть событие на получение файлов
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С