Имя: Пароль:
1C
1С v8
Отправка картинки через POST и параметры в формате JSON 1c
, ,
0 Ruslan_
culeiman
 
01.02.18
15:55
Приветствую, помогите кто в теме, надо отправить post картинку с параметрами в формате JSON, не могу понять куда пихать строку JSON:

    ИмяФайлаОтправки = ПолучитьимяВременногоФайла("txt");
    Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаОтправки);
    
    ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
    ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""photo.jpg""");
    ЗаписьТекста.ЗаписатьСтроку("Content-Type: image/jpeg");
    ЗаписьТекста.ЗаписатьСтроку("");
    ЗаписьТекста.Записать(Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных)));
    ЗаписьТекста.ЗаписатьСтроку("");
    ЗаписьТекста.ЗаписатьСтроку("--"+boundary+"--");
    ЗаписьТекста.Закрыть();
    
    ФайлОтправки        = Новый Файл(ИмяФайлаОтправки);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    
    // передадим данные на сервер
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "multipart/form-data, boundary="+boundary);
    Заголовки.Вставить("Content-Lenght", РазмерФайлаОтправки);
    
                        
    ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);
    Запись = Новый ЗаписьJSON;
    Запись.ПроверятьСтруктуру = Истина;
    Запись.УстановитьСтроку(ПараметрыJSON);
    
    Запись.ЗаписатьНачалоОбъекта();        
    
    Запись.ЗаписатьИмяСвойства("id");
    Запись.ЗаписатьЗначение(Код);
    Запись.ЗаписатьКонецОбъекта();
    
    СтрокаJSON = Запись.Закрыть();
    
    ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
    
    Если СтруктураНастроек.ЗащищенноеСоединение Тогда
        Порт = 443;
        Соединение = Новый ЗащищенноеСоединениеOpenSSL;
    Иначе
        Порт = 80;
        Соединение = Неопределено;
    КонецЕсли;    
    
    HTTPСоединение = Новый HTTPСоединение(СтруктураНастроек.Сервер, Порт, СтруктураНастроек.Логин, СтруктураНастроек.Пароль,,,Соединение);
    Результат      = HTTPСоединение.ОтправитьДляОбработки(ИмяФайлаОтправки, "/api/import/files/", ИмяФайлаОтвета, Заголовки);
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.ОткрытьФайл(ИмяФайлаОтвета);
    Данные = ПрочитатьJSON(ЧтениеJSON, Ложь);
    ЧтениеJSON.Закрыть();
1 Ruslan_
culeiman
 
01.02.18
16:36
UP
2 dezss
 
01.02.18
16:43
Так это ж ты куда-то отправляешь, вот там пусть тебе и ответят.
Вообще обычно его в тело пихают, но у тебя там файл.
Может в тот файл и свой json запихай.
3 drcrasher
 
01.02.18
16:44
(2) а не логичнее картинку в джейсон сложить? всё равно бейс64строка
4 dezss
 
01.02.18
16:45
(3) да какая разница что логичнее, важно как это будут разбирать на принимающей стороне.
5 Сергиус
 
01.02.18
16:59
(0)УстановитьТелоИзДвоичныхДанных(<Данные>), можно попробовать эту функцию.
6 dezss
 
01.02.18
17:01
(5) он и так тело из файла устанавливает...он не знает, куда бы еще и json запихать, насколько я понял...
7 Ruslan_
culeiman
 
01.02.18
17:09
ребят я кину описание, может я не правильно понял
https://cdn1.savepice.ru/uploads/2018/2/1/8e9586df9d1435d1fc004eef2b4a609e-full.jpg
8 Ruslan_
culeiman
 
01.02.18
17:16
там уже не json, а обычный multipart form data. В ответ прийдет ID сущность, вот этот ID необходимо отправлять в PUT запросе как {"file": id}
а вот ответ тех. поддержки
9 dezss
 
01.02.18
17:20
(8) ничего не понятно.
1) ты отправляешь файл,
2) тебе приходит его id,
3) ты следом отправляешь его id?
10 drcrasher
 
01.02.18
17:25
(9) ну чо не ясно то?
1. отправляют картинку на сервак
2. сервак принимает картинку и возвращает айди
3. этот айди нужно вставить среди прочих букв с джейсон и пульнуть его на сервер
4. ....
5. профит
11 dezss
 
01.02.18
17:27
(10) а сам сервак не знает тот айди, который он возвращает для этого файла?
12 dezss
 
01.02.18
17:27
(10) + кстати, у тебя до профита должен еще быть пункт с кальсонами)))
13 drcrasher
 
01.02.18
17:30
(10) сервак обязан всех помнить чтоле?
он вернул айди временного файла, с которым клиент должен что-то сделать. для этого и возвращается/передаётся айди файла. имя там, описание товара, ещё чонить, фиг знает, что у тс за задача стоит.
не прислал запрос с айдишником - крон подумал и через некоторое время грохнул временный файл
14 drcrasher
 
01.02.18
17:30
(13) -> (11)
15 dezss
 
01.02.18
17:33
(13) так изначально ТС-у было сказано, уточнить у сервака, что именно ему надо
16 Ruslan_
culeiman
 
02.02.18
14:02
подскажите: отправляю картинку, а сервер отвечает: Значение не должно быть пустым.
17 Ruslan_
culeiman
 
02.02.18
14:03
(16) поле tarfget - Значение не должно быть пустым. вот так
18 Ruslan_
culeiman
 
02.02.18
14:04
(15) тьфу блин target
19 drcrasher
 
02.02.18
14:14
(16) сорян, телепаты ушли бухать
20 Ruslan_
culeiman
 
02.02.18
14:25
(19) если про код, то он тот же в (0). Пятница уже у телепатов?)