Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
08 янв 2026, 11:01

Отправка файла csv UTF8 через POST-запрос

Автор Сметанин, 12 сен 2025, 05:16

0 Пользователей и 1 гость просматривают эту тему.

Сметанин

Доброе утро!
Использую следующий код:

Подключение = Новый Структура ("HTTP, ЗаголовокHTTP, Адрес" );   
    Подключение.Адрес = Ресурс;
   
    HTTP = Новый HTTPСоединение(Сервер,,,,,,Новый ЗащищенноеСоединениеOpenSSL);
   
    Boundary = Строка(Новый УникальныйИдентификатор());
    МассивФайловДляОбъединения = Новый Массив;

    //Формируем начальный фрагмент файла POST-запроса
    ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
    ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.ANSI, Символы.ПС, Ложь);
    //Определяем раздел двоичных данных   
    ФайлОтправкиНачало.ЗаписатьСтроку("--"+boundary);
    ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""format""");
    ФайлОтправкиНачало.ЗаписатьСтроку("");
    ФайлОтправкиНачало.ЗаписатьСтроку("smsPersons");

    ФайлОтправкиНачало.ЗаписатьСтроку("--" + Boundary);
    //Указываем имя файла для передачи       

    ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""" + ИмяФайлаДляЗагрузки + """");
    //Указываем тип передаваемых данных.
    ФайлОтправкиНачало.ЗаписатьСтроку("Content-Type: text/csv");
    ФайлОтправкиНачало.ЗаписатьСтроку("");
    ФайлОтправкиНачало.Закрыть();

    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);

    //Копируем файл для загрузки во временный и добавляем в массив файлов для объединения

    ИмяФайлаДляЗагрузкиВременный = ПолучитьИмяВременногоФайла("csv");
   КопироватьФайл(ИмяФайлаДляЗагрузки, ИмяФайлаДляЗагрузкиВременный);
   МассивФайловДляОбъединения.Добавить(ИмяФайлаДляЗагрузкиВременный);
   //МассивФайловДляОбъединения.Добавить(ИмяФайлаДляЗагрузки);

    //Формируем конечный фрагмент файла POST-запроса

    ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt");
    ФайлОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.ANSI, Символы.ПС, Ложь);

    //Завершение раздела двоичных данных

   //ФайлОтправкиКонец.ЗаписатьСтроку("");
   ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary);
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary + "--");
    ФайлОтправкиКонец.Закрыть();

    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);

    //Теперь сформированные фрагменты сообщения для сервера объединяем в один файл POST-запроса

    ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);   
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
    Заголовки.Вставить("Authenticate", Токен);
 
    HHTPЗапрос = Новый HTTPЗапрос(Подключение.Адрес, Заголовки);
    HHTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);   

    HTTPОтвет = HTTP.ОтправитьДляОбработки(HHTPЗапрос);
   Сообщить(HTTPОтвет.КодСостояния);
    ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
    Сообщить(ТекстОтвета); 

Сервер отдает ошибку {"troubles":["Отсутствует колонка \"ID\""]} (это первая колонка)
�В файле отправки если смотреть его в кодировке utf-8 перед ID вставляется какой-то служебный символ ZWNBSP.
Если файл для загрузки перекодировать в ANSI и обратно в UTF-8 в Notepad++ то все успешно отправляется.
Подскажите пожалуйста что можно сделать?

Сметанин

Решено. Использовал при создании файла кодировку "CESU-8".

Похожие темы (5)

Рейтинг@Mail.ru

Поиск