Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Отправка на сайт картинок из 1С

Отправка на сайт картинок из 1С
Я
   John Locke
 
04.05.20 - 19:49
Здравствуйте. Имеется конфа, которую надо подружить с сайтом. Никак не могу заставить 1С правильно отправлять изображения посредством post запроса. Код, пакующий и отправляющий файл, следующий:
    ИмяФайлаДляЗагрузки = "C:\Users\User123\Desktop\1.jpg" ;  
    ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt";
    Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    
    //Определяем имя файла ответа от веб-сервера.
    ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.tmp";     
    КодироватьФайл = Ложь;
    //Определяем массив для процедуры ОбъединитьФайлы
    МассивФайловДляОбъединения = Новый Массив;
    
    //Формируем начальный фрагмент файла POST-запроса
    ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
    ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.ANSI, Символы.ПС, Ложь);
    //Определяем раздел двоичных данных
    ФайлОтправкиНачало.ЗаписатьСтроку("--" + Boundary);
    //Указываем имя файла для передачи
    //На сервере оно появится в массиве $_FILES['datafile']['name']
    ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""file1""; filename=""dkfe.jpg""");
    //Указываем тип передаваемых данных.
    //С таким же успехом в Content-Type можно указать application/x-octet-stream или application/x-zip-compressed
    ФайлОтправкиНачало.ЗаписатьСтроку("Content-Type: application/x-zip-compressed");
    ФайлОтправкиНачало.ЗаписатьСтроку("");
    ФайлОтправкиНачало.Закрыть();
    
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);
    
    //Копируем файл для загрузки во временный и добавляем в массив файлов для объединения
    ИмяФайлаДляЗагрузкиВременный = ПолучитьИмяВременногоФайла("tmp");
    КопироватьФайл(ИмяФайлаДляЗагрузки, ИмяФайлаДляЗагрузкиВременный);
    МассивФайловДляОбъединения.Добавить(ИмяФайлаДляЗагрузкиВременный);
    
    //Формируем конечный фрагмент файла POST-запроса
    ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt");
    ФайлОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.ANSI, Символы.ПС, Ложь);
    
    //Завершение раздела двоичных данных
    //ФайлОтправкиКонец.ЗаписатьСтроку(Символы.ПС+"--" + Boundary);
    ФайлОтправкиКонец.ЗаписатьСтроку(Символы.ПС+"--" + Boundary + "--"+Символы.ПС);    
    ФайлОтправкиКонец.Закрыть();
    
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);
    ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
    
    ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.txt";
    ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt";
    Сервер = "сервер";
    АдресРесурса = "адрес";
    Заголовки = Новый Соответствие;
    HTTPСоединение = Новый HTTPСоединение(Сервер);
    ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    //Запрос
    HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
    HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
    HTTPЗапрос.Заголовки.Вставить("Content-Lenght", РазмерФайлаОтправки);
    
    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
    
    Попытка
        ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос,ИмяФайлаОтвета);    
    Исключение
        //Обработка ответа
    КонецПопытки;

Формируемый файл при открытии выглядит следующим образом:
https://sun9-37.userapi.com/WeF1jW8cGXsSrUR6wJPcMTwQz8SP6Jv1nA_2UA/wwQTVVwFw80.jpg
Сервер в ответе присылает "Неверный тип файла". Тот же файл, загруженный тем же запросом через Postman грузится без проблем. Что я делаю не так, и где может быть ошибка. Сервер и адрес отправки верные, удалил здесь, чтобы не светить
   acht
 
1 - 04.05.20 - 19:56
(0 > ФайлОтправкиНачало.ЗаписатьСтроку("Content-Type: application/x-zip-compressed"); 

Что это означает, понимаешь?
   acht
 
2 - 04.05.20 - 19:57
Бери в руки Fiddler и добивайся, чтобы отправляемое через 1С и твой Postman совпадало.
   John Locke
 
3 - 04.05.20 - 20:01
(1) Везде пишут или так, или application/x-octet-stream, в любом случае, ничего не меняется
   acht
 
4 - 04.05.20 - 20:09
(3) Если бы я хотел узать у тебя "как везде пишут", я бы так и спросил. Смекаешь? Бери фиддлер.
   John Locke
 
5 - 04.05.20 - 20:16
(4) уже ставлю
   John Locke
 
6 - 04.05.20 - 20:27
В общем, лопух я. Нигде об этом не сказано, но в случае загрузки изображений, Content-Type должно быть image/jpeg. Всем спасибо. Прошу прощения, что отвлек

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.