Имя: Пароль:
1C
 
Отправить файл на сервер через POST
0 Zixxx
 
16.10.15
15:14
Не получается отправить файл на сервер через POST с использованием типа multipart/form-data

[CODE]
    ФайлДляОправки = Новый Файл("D:\1\ost.xml");
    РазмерОтправляемогоФайла = ФайлДляОправки.Размер();
    
    boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data boundary=" + boundary + "");
    ЗаголовокHTTP.Вставить("Content-Length", XMLСтрока(РазмерОтправляемогоФайла));
    
    HTTPЗапрос = Новый HTTPЗапрос();
    АдресРесурса    = "/cp/distributor/pricelistUpdate?userlogin="    + СтруктураПараметров.Логин
    + "&userpsw="            + СтруктураПараметров.Пароль
    + "&distributorId="        + "1380620"
    + "&uploadFile="        + "D:\1\ost.xml";
    
    HTTPЗапрос.АдресРесурса    = АдресРесурса;
    HTTPЗапрос.Заголовки    = ЗаголовокHTTP;
    HTTPЗапрос.УстановитьИмяФайлаТела("D:\1\ost.xml");
    
    Соединение    = Новый HTTPСоединение("zap54.com.public.api.abcp.ru", , СтруктураПараметров.Логин, СтруктураПараметров.Пароль);
    
    ОтветHTTP    = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
    
    Тело        = ОтветHTTP.ПолучитьТелоКакСтроку();
    
    Чтение = Новый ЧтениеJSON();
    Чтение.УстановитьСтроку(Тело);
    Данные = ПрочитатьJSON(Чтение);
    
    Сообщить("" + Данные.errorCode + " / " + Данные.errorMessage + "");
[/CODE]

Как только не пробовал делать постоянно получаю ошибку "2 / Файл не передан или передан некорректно."
Такое впечатление что сервер не видит что я ему передал файл, а вот параметры видит, если указать не правильно будет ругаться что не найден поставщик

Здесь небольшой мануал по ссылке https://yadi.sk/i/2MyQHEhkjn9hk

Может кто подсказать где ошибка или что делаю не так?
1 Дык ё
 
16.10.15
16:03
в теле запроса не xml должно быть, а form-data
2 Zixxx
 
16.10.15
16:08
(1) Так а в каком формате это должно быть?
3 Дык ё
 
16.10.15
16:10
4 Zixxx
 
16.10.15
16:18
(3) Так я тоже пробовал сделать и передал туда все параметры

[CODE]
--150e68792816410fb0043e03e1beaef9
Content-Disposition: form-data; name="userlogin"

[email protected]
--150e68792816410fb0043e03e1beaef9
Content-Disposition: form-data; name="userpsw"

7334099e57f0243fec8932e227051ec2
--150e68792816410fb0043e03e1beaef9
Content-Disposition: form-data; name="distributorId"

1380620
--150e68792816410fb0043e03e1beaef9
Content-Disposition: form-data; name="xml"; filename=C:\Users\Admin\AppData\Local\Temp\v8_97E2_a4.xml
Content-Type: xml

<?xml version='1.0' encoding='UTF-8'?>
<base>
    <article>
        <description>АБСОРБЕР ЗАДНЕГО БАМПЕРА AССENT</description>
        <number>86620-25000</number>
        <brand>Hyundai/KIA</brand>
        <price>882</price>
        <quantity>5</quantity>
    </article>
    <article>
        <description>АБСОРБЕР ЗАДНЕГО БАМПЕРА ELANTRA NEW</description>
        <number>86620-2H010</number>
        <brand>Hyundai/KIA</brand>
        <price>654</price>
        <quantity>1</quantity>
    </article>
</base>
--150e68792816410fb0043e03e1beaef9--
[/CODE]
5 Дык ё
 
16.10.15
16:56
(4) boundary в теле такой же, как в заголовке?
ну и Content-Type, наверно, text/xml
6 Гёдза
 
16.10.15
16:59
Может BOM
7 Zixxx
 
16.10.15
16:59
(5) Да, были некоторые неточности, разобрался, спасибо. Только как-то геморно все таки получается, параметры зачем-то надо указывать не только в адресе ресурса но и в самом тексте
8 Дык ё
 
16.10.15
17:01
(7) а в адресе указывать не надо. разве что сервис индусы писали :)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший