|
Отправка файла HTTPСоединение | ☑ | ||
---|---|---|---|---|
0
SvenSoft
10.02.17
✎
21:46
|
Добрый вечер.
Делаю отправку файла на веб-сервер (в примере текстовый файл, но на самом деле он может быть каким угодно): [code] тФайл = новый ТекстовыйДокумент; тФайл.ДобавитьСтроку("ля ля ля"); ПолноеИмяИсходящегоФайла = ПолучитьИмяВременногоФайла(".txt" ); тФайл.Записать(ПолноеИмяИсходящегоФайла,КодировкаТекста.UTF8); Попытка HTTPСоединение = Новый HTTPСоединение("test.ru"); Исключение Сообщить("Не удалось соединиться с сервером!"); Возврат Ложь; КонецПопытки; //ТелоЗапроса = Новый ДвоичныеДанные(ИмяИсходящегоФайла); ТелоЗапроса = Base64Строка(Новый ДвоичныеДанные(ПолноеИмяОтправляемогоФайла)); ФайлНаОтправление = Новый Файл(ПолноеИмяОтправляемогоФайла); ИмяФайла = ФайлНаОтправление.Имя; РазмерФайла = XMLСтрока(ФайлНаОтправление.Размер()); Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); КлючПоля = "datafile"; ЗаголовкиЗапроса = Новый Соответствие; ЗаголовкиЗапроса.Вставить("Content-Type","multipart/form-data; boundary=" + Boundary); // "application/x-www-form-urlencoded" "application/json" ЗаголовкиЗапроса.Вставить("Content-Length", РазмерФайла); ЗаголовкиЗапроса.Вставить("Content-Disposition", "form-data; name=""" + КлючПоля + """; filename=""" + ПолноеИмяОтправляемогоФайла + """"); ФайлОтправки = Новый ЗаписьТекста(ПолноеИмяОтправляемогоФайла, КодировкаТекста.UTF8, Символы.ПС, Ложь); ФайлОтправки.ЗаписатьСтроку("--" + Boundary); ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + КлючПоля + """; filename=""" + ИмяФайла + """"); ФайлОтправки.ЗаписатьСтроку("Content-Type: application/octet-stream" + Символы.ПС + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(ТелоЗапроса); ФайлОтправки.ЗаписатьСтроку("--" + Boundary + "--"); ФайлОтправки.Закрыть(); HTTPЗапрос = Новый HTTPЗапрос("api/file", ЗаголовкиЗапроса); HTTPЗапрос.УстановитьИмяФайлаТела(ПолноеИмяОтправляемогоФайла); HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); [/code] Но в $_FILES на сервере ничего не прилетает. Что я делаю не так? |
|||
1
Сергиус
10.02.17
✎
22:18
|
(0)А в HTTPОтвет какой статус возвращает?
|
|||
2
SvenSoft
10.02.17
✎
22:37
|
200
|
|||
3
Сергиус
11.02.17
✎
00:14
|
(2)Попробуй Wireshark'ом посмотреть что отправляется.
|
|||
4
SvenSoft
11.02.17
✎
14:26
|
> Попробуй Wireshark'ом посмотреть что отправляется.
Не очень знаком с этим инструментом. Скажу так, что на этой же машине на этот же адрес сайта отправляю файл через Postman - все нормально, из 1С нет! |
|||
5
SvenSoft
11.02.17
✎
14:53
|
А вот что формируется в теле запроса кодом из листинга в первом посте:
ФайлОтправки = Новый ЗаписьТекста(ПолноеИмяОтправляемогоФайла, КодировкаТекста.UTF8, Символы.ПС, Ложь); ФайлОтправки.ЗаписатьСтроку("--" + Boundary); ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + КлючПоля + """; filename=""" + ИмяФайла + """"); ФайлОтправки.ЗаписатьСтроку("Content-Type: application/octet-stream" + Символы.ПС + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(ТелоЗапроса); ФайлОтправки.ЗаписатьСтроку("--" + Boundary + "--"); ФайлОтправки.Закрыть(); --9df4aac7ad4b4197bf18dc6981c6c46f Content-Disposition: form-data; name="datafile"; filename="v8_D96B_4e.txt" Content-Type: application/x-octet-stream 77u/0LvRjyDQu9GPINC70Y8NCg== --9df4aac7ad4b4197bf18dc6981c6c46f-- |
|||
6
Мимохожий Однако
11.02.17
✎
15:04
|
Синтаксис:
Новый HTTPСоединение(<Сервер>, <Порт>, <Пользователь>, <Пароль>, <Прокси>, <Таймаут>, <ЗащищенноеСоединение>, <ИспользоватьАутентификациюОС>) |
|||
7
SvenSoft
11.02.17
✎
15:17
|
И только первый параметр обязателен, все остальные мне по умолчанию подходят.
|
|||
8
SvenSoft
11.02.17
✎
15:21
|
остальные запросы GET, РUT, POST (кроме отправки файла) нормально отрабатывают, проблема только с отправкой файла.
|
|||
9
oleg_km
12.02.17
✎
19:24
|
Сравни Fiddler ом. Сразу увидишь в чем дело
|
|||
10
Сергиус
13.02.17
✎
01:40
|
(4) Да там все интуитивно понятно, качни - и хоть понятно будет, отправляется что-то или нет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |