![]() |
![]() |
![]() |
|
Отправка файла csv UTF8 через POST-запрос | ☑ | ||
---|---|---|---|---|
0
Сметанин
12.09.25
✎
05:20
|
Доброе утро!
Делал на основе Передача файла и параметров методом POST Подключение = Новый Структура ("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++ то все успешно отправляется. Подскажите пожалуйста что можно сделать? |
|||
1
vladmenleo
12.09.25
✎
05:38
|
(0) Так может у файла отправки указать кодировку не КодировкаТекста.ANSI а КодировкаТекста.UTF8? В анси нет первых символов БОВ или добавляй вручную. По семерочному будет так Текст.ДобавитьСтроку(Симв(239) + Симв(187) + Симв(191) + "<?xml version=""1.0"" encoding=""utf-8""?>");
Соответственно переделай под 8.3 |
|||
2
Сметанин
12.09.25
✎
05:47
|
(1) Пробовал UTF8 для файла отправки, была ошибка 500. Символ ZWNBSP наоборот мешает. Почитал как убрать, пишут что это метка порядка байтов. В 1с управлять меткой можно только при записи файла из потока. Буду пробовать в этом направлении.
|
|||
3
Сметанин
12.09.25
✎
05:59
|
Получилось! Просто использовал "CESU-8" Формирую файл csv выгружал вроде UTF-8.но получилось UTF-8 BOM, как убрать BOM ?
|
|||
4
vladmenleo
12.09.25
✎
06:07
|
(2) Мы работаем с купером и я выгружаю им остатки по складам. Тоже используется разделитель boundary. Долго бился, пока не навставлял лишних переводов строк, тогда заработало. Типа такого:
СтрокаДляОтправки = СтрокаДляОтправки + "Content-Type: application/xml" + Символы.ПС + Символы.ПС; СтрокаДляОтправки = СтрокаДляОтправки + СтрокаХМЛ; СтрокаДляОтправки = СтрокаДляОтправки + Символы.ПС + Символы.ПС + "--" + Боундари + "--" + Символы.ПС; Попробуй лишних ПС навставлять и кодировка УТФ8 |
|||
5
vladmenleo
12.09.25
✎
06:10
|
(3) Вот оно че, Михалыч! :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |