Имя: Пароль:
1C
1C 7.7
v7: Загрузка файла на сервер
0 felix_2013
 
19.11.12
16:13
Добрый день. Пытаюсь сделать выгрузку файла на сервер с помощию 1с 7.7 ( для 8ки уже реализовал похожее решение , а 7ка чёта брыкается).
Вообщем код обработки:

Процедура ПриОткрытии()
   Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "Base64.dll")=0 Тогда
       Сообщить("Не удается загрузить Base64.dll!");
       Возврат;
   Иначе
       Сообщить("Удалось загрузить Base64.dll!");    
   КонецЕсли;
КонецПроцедуры    // ПриОткрытии


// Преобразует файл в Base64 строку

Функция Base64(ПутьКФайлу)
   Попытка
       ВК = СоздатьОбъект("AddIn.Base64");
   Исключение
       Сообщить("Не удается создать объект AddIn.Base64!");
       а=1/0;
   КонецПопытки;
   СтрокаИзФайла = ВК.ЗакодироватьBase64(ПутьКФайлу);
   Возврат СтрокаИзФайла;
КонецФункции    // Base64
   
Процедура Сформировать()

//Используем объект winhttprequest для создания HTTP-запросов к серверу
   httpRequest = СоздатьОбъект("winhttp.winhttprequest.5.1");
   Boundary = "28405758029000";
   ФайлДанных = "data.txt";
   
   ПутьКФайлуДанных = КаталогПользователя() + ФайлДанных;
   // Используем внешнюю компоненту Base64.dll для преобразования строки
   СтрокаBase64 = Base64(ФайлДанных);// Интересно,
   Если СтрокаBase64 = "" Тогда        //если размер строки больше 385 Кб 1С вылетает...    
       Сообщить("Файл " + ПутьКФайлуДанных + " не содержит ни одной строки!","!");
       Возврат;
   КонецЕсли;
   
   //Определяем раздел двоичных данных и указываем имя файла для передачи
   Text1 = "--" + Boundary + "
   //Соответствует HTML-тэгу <input type="file" name="data">
   //Поле filename указывает на раздел передачи файла
   |Content-Disposition: form-data; name=""data""; filename=""" + ФайлДанных + """
   |Content-Type: application/xml;" + РазделительСтрок + РазделительСтрок + "
   |" + СтрокаBase64 + РазделительСтрок + "
   //Определяем раздел для других POST-данных,
   //например содержимого полей виртуальной HTML-формы.
   |--" + Boundary + "
   //Соответствует HTML-тэгу <input type="text" name="user" id="user">
   |Content-disposition: form-data; name=""user""" + РазделительСтрок +
   РазделительСтрок + "
   |*****" + РазделительСтрок + "
   |--" + Boundary + "
   //Соответствует HTML-тэгу <input type="text" name="pswd" id="pswd">
   |Content-disposition: form-data; name=""pswd""" + РазделительСтрок +
   РазделительСтрок + "
   |*****" + РазделительСтрок + "
   |--" + Boundary + "--";
                             
   httpRequest.open("POST", "http://webconto.by/Data_menu/vigr.php", 0);
   httpRequest.setRequestHeader("Content-Type","multipart/form-data;boundary=" + Boundary);
   httpRequest.setRequestHeader("Content-Length", СтрДлина(Text1));
   
   httpRequest.send(Text1);// Интересно, если размер строки больше 385 Кб 1С вылетает...
if (httpRequest.Status = 200) then
   Ответ = httpRequest.ResponseText;//Ответ приходит, когда в file.php используем echo    
endif;
   
КонецПроцедуры


Тут похоже какая то лажа происходит с POST запросом. Суть обработки - отправить файл на сервер, а там уе с помощью php его подхватить и записать. Моет кто сталкивался с похожей проблемой ?
1 Морковка
 
19.11.12
16:26
а в чем лажа-то заключается? у меня аналогичная штука работает, и в тексте вроде ничего криминального. Может с самой отправляемой строкой что-то не так?
2 felix_2013
 
19.11.12
16:36
Вот без понятия ) Морковка , можете скинуть пожалуйста свою обработку ? [email protected]
3 Морковка
 
19.11.12
16:44
(2) не, свою не скину, да и там много кода и по большей части он к отправке не относится

А вообще ты же сам понимаешь что лажа? Может лажа вообще на принимающей стороне?
4 felix_2013
 
19.11.12
17:15
нет , на принимающей всё впорядке... я видимо немного неправильно формирую запрос
5 ptrtss
 
20.11.12
10:01
Если есть возможность запустить данный скрипт в ручном режиме, то можно перехватить (заснифить) запросы которые шлет браузер и сделать по аналогии

К примеру, http://www.wireshark.org
6 felix_2013
 
20.11.12
10:44
Что то начал химичить и теперь пишет:

WinHttp.WinHttpRequest: Не удаётся выполнить запрос на перенаправление протокола HTTP
7 ptrtss
 
20.11.12
11:19
Откуда уверенность что на сервисе все в порядке?
8 felix_2013
 
20.11.12
12:46
8 ка аналогичным образом передаёт файлы туда...
9 ptrtss
 
20.11.12
14:03
Ну дык заснифь запросы, восьмера то поди WinHttpRequest не пользует
Независимо от того, куда вы едете — это в гору и против ветра!