Имя: Пароль:
1C
1C 7.7
v7: WinHttp. Импорт фотографии...
0 palpetrovich
 
01.04.19
17:13
Из "инструкции":
Для импорта фотографии пользователя нужно отправить POST запрос на URI /api/rest.php/auth/users?action=update-user-photo
к запросу должен быть прикреплен файл в формате изображения (png, jpg, gif) в теле запроса должен быть указана uid пользователя. Запрос должен содержать загловоки Content-Type: multipart/form-data и Authorization: Bearer xxxxxx. Пример запроса:
curl 'http://localhost:8080/api/rest.php/auth/users?action=update-user-photo' -H 'Authorization: Bearer xxxxxx' -H 'Content-Type: multipart/form-data' -F 'uid=some-user-uid' -F 'file=@/path/to/photo.jpg'

"curl"  на предприятии не используется, работаем по WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
вот так:
WinHttp.SetRequestHeader("Authorization", "Bearer " + jwt_token); // jwt_token получаем при авторизации
WinHttp.setRequestHeader("Content-type", "multipart/form-data");
WinHttp.Send(uid); // 'uid=C83FD6CC59994F2717F7AFDBE428FE2F'
Если WinHttp.Status <> 200 Тогда  // тут вываливаемся по {"no_user_id":{"user_id":"Required field user_id or uid"}}  Status: 400, хотя uid - 100% верный
    Возврат WinHttp.ResponseText();
КонецЕсли;
WinHttp.Send(file); // сюда не доходим

Может я неверно интерпретирую опцию "-F"? Не нашел ничего про нее, тупо делаю "WinHttp.Send(uid)"
Вот "-H"  это SetRequestHeader , что  "-F"???
1 Вафель
 
01.04.19
17:17
ты 2 раза делаешь сенд, а нужно 1 раз, но малтипарт
2 palpetrovich
 
01.04.19
17:20
(1)  а разве вот это не 2 раза?
-F 'uid=some-user-uid' -F 'file=@/path/to/photo.jpg'
3 Вафель
 
01.04.19
17:21
(2) это 2 значения
4 Kigo_Kigo
 
01.04.19
17:23
а где WinHttp.open(Метод, URL, 0); ?
5 palpetrovich
 
01.04.19
17:23
(4) он есть, выше :)
6 Kigo_Kigo
 
01.04.19
17:23
Метод = "GET" или POST
7 palpetrovich
 
01.04.19
17:24
(6) WinHttp.Open("POST", URLЗапроса, 0);
8 Kigo_Kigo
 
01.04.19
17:30
9 Kigo_Kigo
 
01.04.19
17:31
10 Kigo_Kigo
 
01.04.19
17:31
11 Вафель
 
01.04.19
17:33
малтипарт нельзя методом гет
12 palpetrovich
 
01.04.19
17:38
(10) похоже ты мне подсказал что не так ... я какого-то https вместо http использовал для URLЗапроса ... проверяю
13 palpetrovich
 
01.04.19
17:40
+(12) новое что-то :)
"Permission denied"  Status: 403
14 palpetrovich
 
01.04.19
17:56
+(13) а теперь на WinHttp.Send(uid) все время -
WinHttp.WinHttpRequest: Невозможно создать файл, так как он уже существует

Какой файл???
15 Kigo_Kigo
 
01.04.19
18:02
uid , что отправляешь?
16 Kigo_Kigo
 
01.04.19
18:05
Сюда уже доходит?
Может ты пытаешься засунуть файл который ты уже засунул, а перезаписать не дает?
WinHttp.Send(file); // сюда не доходим
17 palpetrovich
 
01.04.19
19:29
(16) нет
WinHttp.Send(uid): 'uid=C83FD6CC59994F2717F7AFDBE428FE2F'
*Исключение* WinHttp.Send(uid) WinHttp.WinHttpRequest: Невозможно создать файл, так как он уже существует.

Если WinHttp.Status <> 200 Тогда
WinHttp.WinHttpRequest: Данные, необходимые для завершения этой операции еще не доступны
18 palpetrovich
 
01.04.19
19:56
"Невозможно создать файл, так как он уже существует." - не то, это я вот это засунул зачем-то:
WinHttp.setRequestHeader("Content-type", "application/json;charset=UTF-8");
без этого,  ответ
"Permission denied"  Status: 403
.."доступ запрещен"
19 Сияющий в темноте
 
01.04.19
21:59
я бы лучше попробовал через ServerXmlHttpRequest.
20 trad
 
01.04.19
23:06
(19) ничего не поможет, если посылать все что угодно, но не multipart/form-data когда требуется multipart/form-data
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn