Имя: Пароль:
1C
 
Postman в каком формате передает файлы если поле имеет тип файл?
0 Shur1cIT
 
13.08.21
17:16
вот как в постмане https://c.radikal.ru/c42/2108/c7/e38a3273955d.png
в 1С пытаюсь файл тупо в Base64 преобразовать и выполнить УстановитьТелоИзСтроки
в результате файл нечитаемый, если через постман то всё ок
1 Fragster
 
гуру
13.08.21
17:17
скорее всего тебе надо курить multipart кодирование
2 Fragster
 
гуру
13.08.21
17:17
1с к этому не располагает совсем
3 Fragster
 
гуру
13.08.21
17:17
вернее не облегчает
4 Fragster
 
гуру
13.08.21
17:18
5 Fragster
 
гуру
13.08.21
17:18
хотя может в бсп какие-то облегчалки есть для этого
6 polosov
 
13.08.21
17:20
7 Shur1cIT
 
13.08.21
17:26
спасибо, проще вариантов нет?
8 Fragster
 
гуру
13.08.21
17:28
(6) этот хороший, да.
9 Вафель
 
13.08.21
17:32
(8) Эхх, я как то тебя более спортивным представлял
10 Shur1cIT
 
13.08.21
17:36
это не оно?
https://its.1c.ru/db/metod8dev#content:5917:hdoc:http-messages
если в этом примера буду свой файл помещать сработает? обязательно Content-Type задавать для файла? у меня разные могут быть
11 rozer76
 
13.08.21
17:46
12 Вафель
 
13.08.21
17:47
(10) такой юзай
application/octet-stream
13 polosov
 
13.08.21
17:48
(10) Да, это оно. Пробуй.
14 Shur1cIT
 
13.08.21
17:50
ок спасибо
15 rozer76
 
13.08.21
18:38
Только причем тут мультипарт? Если читать мультипарт то да, это непросто. Нет разных типов данных которые нужно писать, нет разделителей - обычные двоичные данные и УстановитьТелоИзДвоичныхДанных() должно прокатить
16 Shur1cIT
 
13.08.21
22:29
Почти разобрался, это код рабочий, но грузит корректно только pdf файлы, картинки и exel не читаемы на портале, при этом если руками на портал гуду то все окей

Поток = Новый ПотокВПамяти();
    ЗаписьДанных = Новый ЗаписьДанных(Поток);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""; filename=" + ИмяФайла);
    ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/octet-stream");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.Записать(Файл); // файл - это двоичные данные
    ЗаписьДанных.Закрыть();
    
    ФайлДвоичныеДляОтправики = Поток.ЗакрытьИПолучитьДвоичныеДанные();
    HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ФайлДвоичныеДляОтправики);
    
    Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

    ТелоОтвета = Результат.ПолучитьТелоКакСтроку();

    Возврат Результат.КодСостояния
17 Shur1cIT
 
13.08.21
22:35
Нужно понять почему ему только PDF нравится может это связано с application/octet-stream? или не влияет?
18 Shur1cIT
 
16.08.21
08:13
(16) (17) Поднимаю тему, почему корректно грузится только PDF через поток? как заставить все грузить?
19 бегинер
 
16.08.21
09:39
может быть у вас такой случай, тоже получал файлы в постмане норм, в 1с- кракозяблы, оказалось браузер на лету gzip разархивирует (файл в gzip выдавал сервер) а 1с не может

==============
так как штатно 1С gzip не может разархивировать, нашел бесплатную dll (дублирую во вложении) которую регим через regsvr32 и используем как COM Обьект, она соотв. может разарх. gzip

http://www.xstandard.com/en/documentation/xgzip/
20 бегинер
 
16.08.21
09:49
вот мой код для получения ответа (не файла), у меня сервер ответ в gzip выдавал

Соединение = Новый HTTPСоединение(ссылка_на_rest_api,,,,,таймаут_rest);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", логин_пароль_base64);
Заголовки.Вставить("Content-type", "application/json");
Заголовки.Вставить("Accept-Encoding", "gzip");
Запрос = Новый HTTPЗапрос(приписка_к_ссылке,Заголовки);
Запрос.УстановитьТелоИзСтроки(строка_тела,"CESU-8");
  попытка;
    Результат=Соединение.ОтправитьДляОбработки(Запрос);
  исключение;    
    сообщить("нет соединения или ответа с сервером ");
  конецпопытки;
ДвоичныеДанные = Результат.получитьТелоКакДвоичныеДанные();
ДвоичныеДанные.Записать(путь+"файл_gzip.zip");
архиватор=Новый COMОбъект("XStandard.GZip");
архиватор.Decompress (путь+"файл_gzip.zip", путь+"распакованный_файл_gzip");
архиватор=неопределено;
Файл = Новый ЧтениеТекста(путь+"распакованный_файл_gzip",кодировкатекста.UTF8);
ВесьФайлОднойСтрокой = Файл.Прочитать();
Файл.Закрыть();
21 Shur1cIT
 
16.08.21
10:50
(20) спасибо, это немного не то
22 ДенисЧ
 
16.08.21
11:05
(19) А что, в заголовках нельзя было сказать, что  не Accept gzip?
Обычно сервера такое понимают.
23 бегинер
 
16.08.21
12:45
(19) неа, там и в описании поставщика api даже не было написано что ответ в gzip отдается :)  сделали как смогли
Основная теорема систематики: Новые системы плодят новые проблемы.