|
парсинг файла, лишний пробел http запрос | ☑ | ||
---|---|---|---|---|
0
Noxvil
13.01.20
✎
16:34
|
Коллеги, добрый день.
Сделал парсинг файла по примеру https://wonderland.v8.1c.ru/blog/novye-instrumenty-dlya-raboty-s-dvoichnymi-dannymi-obespechivayut-kak-posledovatelnyy-dostup-k-danny/ Ранее писал по этому поводу вопрос парсинг form-data body http-запроса ? Сейчас столкнулся с проблемой, что файлы не открываются. Проверил. При открытии файла в текстовый документ добавляется лишний символ переноса строки, предполагаю, что из-за этого не открывается в двоичных данных (картинка или эксель). "------WebKitFormBoundarycpdsNJbUO3brgUUX Content-Disposition: form-data; name="1.txt" 1 2 3 ------WebKitFormBoundarycpdsNJbUO3brgUUX-- " У кого была подобная ошибка? Что делали в этом случае? |
|||
1
Garykom
гуру
13.01.20
✎
16:56
|
(0) Знаем в чем разница между виндовс и линукс стайл в переносах строк?
|
|||
2
Noxvil
13.01.20
✎
17:08
|
(1) Вместе с тобой - возможно, расскажи
|
|||
3
Garykom
гуру
13.01.20
✎
17:11
|
https://qna.habr.com/q/257857
https://stackoverflow.com/questions/1552749/difference-between-cr-lf-lf-and-cr-line-break-types Прикольно что что все три операционки Win|Lin|Mac имеют разный дефолтный перенос строк. Поубивав бы этих каждый со своей головкой и хрен биту для отвертки найдешь. |
|||
4
pechkin
13.01.20
✎
17:12
|
(3) а раньше еще и кодировки разные были
|
|||
5
Garykom
гуру
13.01.20
✎
17:14
|
(4) Это фигня. РеГиСтРоЗаВиСиМоСтЬ в linux это прикольно.
|
|||
6
Garykom
гуру
13.01.20
✎
17:16
|
(5)+ И прикольно когда разные файлы:
aa.txt aA.txt Aa.txt AA.txt пытаются с линукса на виндовс скопировать )) |
|||
7
Noxvil
13.01.20
✎
17:18
|
(3)
Ок, если проблема с символами переноса строк - какое решение моей проблемы? Убрать первые несколько байт в файле в формате переноса? |
|||
8
Noxvil
13.01.20
✎
17:19
|
(3)
Перенос у меня через postman тоже присутствует |
|||
9
Garykom
гуру
13.01.20
✎
17:21
|
(7) (8) Там специально в формате HTML оговаривается указание длины файла, просто при сборке надо сверить и понятно сразу правильно или нет собрали/получили
|
|||
10
Noxvil
13.01.20
✎
17:26
|
(9) Там - это где?
Я делаю запрос через postman и в formdata выбираю файл. Мне как через объект ЧтениеДанных удалить лишний перенос строк? |
|||
11
Garikk
13.01.20
✎
17:29
|
(6) самый прикол создать эти файлы в линуксе, закинуть в гит, а в винде вытянуть репу и попробовать чтото там поредактировать
|
|||
12
Noxvil
13.01.20
✎
17:43
|
Вопрос актуален
|
|||
13
Garykom
гуру
13.01.20
✎
17:46
|
(12) Ты код то уже покажи или что там у тя. Пока не очень понятно на каком этапе проблема возникает.
Может кодируется при отправке файл не правильно, может декодируется а может еще в чем проблема. |
|||
14
Noxvil
13.01.20
✎
17:50
|
(13) Код аналогичный примеру 1с по ссылке https://wonderland.v8.1c.ru/blog/novye-instrumenty-dlya-raboty-s-dvoichnymi-dannymi-obespechivayut-kak-posledovatelnyy-dostup-k-danny/
Функция ПолучитьСтруктуруПараметров(Заголовки, ДвоичныеДанныеТело) Экспорт Разделитель = ПолучитьРазделительСоставногоСообщения(Заголовки); Маркеры = Новый Массив(); Маркеры.Добавить("--" + Разделитель); Маркеры.Добавить("--" + Разделитель + Символы.ПС); Маркеры.Добавить("--" + Разделитель + Символы.ВК); Маркеры.Добавить("--" + Разделитель + Символы.ВК + Символы.ПС); Маркеры.Добавить("--" + Разделитель + "--"); Маркеры.Добавить("" + Разделитель + "--"); Маркеры.Добавить("" + Разделитель + ""); СтруктураПараметров = Новый Структура(); ЧтениеДанных = Новый ЧтениеДанных(ДвоичныеДанныеТело); Размер = ДвоичныеДанныеТело.Размер(); // Переходим к началу первой части. ЧтениеДанных.ПропуститьДо(Маркеры); // Далее в цикле читаем все части. Пока Истина Цикл РезультатЧтенияЧасть = ЧтениеДанных.ПрочитатьДо(Маркеры); Если Не РезультатЧтенияЧасть.МаркерНайден Тогда // Неправильно сформированное сообщение. Прервать; КонецЕсли; ЧтениеЧасти = Новый ЧтениеДанных(РезультатЧтенияЧасть.ОткрытьПотокДляЧтения()); ЗаголовкиЧасти = ПрочитатьЗаголовки(ЧтениеЧасти); //ИмяЧасти = ПолучитьИмяСообщения(ЗаголовкиЧасти); ИмяФайла = ЗаголовкиЧасти["filename"]; Если ИмяФайла = Неопределено Тогда ЗначениеТекстовогоПоля = ЧтениеЧасти.ПрочитатьСимволы(); ЗначениеТекстовогоПоля = СтрЗаменить(ЗначениеТекстовогоПоля,Символы.ПС,""); ЗначениеТекстовогоПоля = СтрЗаменить(ЗначениеТекстовогоПоля,Символы.ВК,""); СтруктураПараметров.Вставить("File",ЗначениеТекстовогоПоля); Иначе СтруктураФайла = Новый Структура(); СтруктураФайла.Вставить("ИмяФайла",ИмяФайла); СтруктураФайла.Вставить("ДвоичныеДанные",ЧтениеЧасти.Прочитать().ПолучитьДвоичныеДанные()); СтруктураПараметров.Вставить("File",СтруктураФайла); КонецЕсли; Если РезультатЧтенияЧасть.ИндексМаркера = 4 Тогда // Прочитали последнюю часть. Прервать; КонецЕсли; КонецЦикла; Возврат СтруктураПараметров; КонецФункции Функция ПолучитьРазделительСоставногоСообщения(Заголовки) ТипСодержимого = Заголовки.Получить("Content-Type"); Свойства = СтрРазделить(ТипСодержимого, ";", Ложь); Граница = Неопределено; Для Каждого Свойство Из Свойства Цикл Части = СтрРазделить(Свойство, "=", Ложь); ИмяСвойства = СокрЛП(Части[0]); Если ИмяСвойства <> "boundary" Тогда Продолжить; КонецЕсли; Граница = СокрЛП(Части[1]); Прервать; КонецЦикла; Возврат Граница; КонецФункции |
|||
15
Garykom
гуру
13.01.20
✎
17:55
|
(14) Content-Length в заголовках есть?
И у тебя маркеры иные по сравнению с кодом в стране чудес |
|||
16
Noxvil
13.01.20
✎
18:04
|
(15)
Есть, 210 Маркеры другие, т.к. boundaryу постмана "boundary=--------------------------026589971661009849135567" |
|||
17
Garykom
гуру
13.01.20
✎
18:18
|
(16) Все равно кривые какие то маркеры, особенно последних два
|
|||
18
Noxvil
13.01.20
✎
18:24
|
(17) Ещё раз, постман делает разделители в виде "--"
----------------------------635697881359966015888745 Content-Disposition: form-data; name="file"; filename="1.txt" Content-Type: text/plain 1 2 3 ----------------------------635697881359966015888745-- Вот пример файла. Есть понимание, как можно правильно разбить файл через объект чтение данных? |
|||
19
Garykom
гуру
13.01.20
✎
18:30
|
Маркеры = Новый Массив();
Маркеры.Добавить("--" + Разделитель); Маркеры.Добавить("--" + Разделитель + Символы.ПС); Маркеры.Добавить("--" + Разделитель + Символы.ВК); Маркеры.Добавить("--" + Разделитель + Символы.ВК + Символы.ПС); Маркеры.Добавить("--" + Разделитель + "--"); |
|||
20
Сияющий в темноте
13.01.20
✎
18:41
|
В windows,при желании,можно включить регистрозависимость файловой системы,если что.
перенос строки,обычно,не сильно важен,если правильно его читать,там илм 10 или 13 или 13 потом 10. ну никогда не было проблем. получил 10,значит линь получил 13,если после нее 10 то винда иначе мак. |
|||
21
Noxvil
13.01.20
✎
18:48
|
(19)
"Content-Type: text/plain 1 2 3 " (20) В (14) я привёл код |
|||
22
Garykom
гуру
13.01.20
✎
19:25
|
(21) Хочешь сказать что должно быть в одну строку 123 ?
|
|||
23
Noxvil
13.01.20
✎
22:07
|
(22) Должно быть
"1 |2 |3" |
|||
24
Garykom
гуру
13.01.20
✎
22:12
|
(23) Покажи что происходит с файлом когда маркеры как в (19) без лишних дополнений.
Узнать что отправил и что пришло можно через hex-редактор, оно встроено в TC или Far |
|||
25
Garykom
гуру
13.01.20
✎
22:12
|
(24)+ Total Commander
|
|||
26
Garykom
гуру
13.01.20
✎
22:15
|
И да лучше мелкий бинарный файл отправляй где коды символов по порядку увеличиваются, тогда сразу видно будет что не так.
00 01 02 03 04 05 06 07 08 09 0A 0B и т.д. |
|||
27
Noxvil
14.01.20
✎
01:14
|
(26) Я через notepad++ открываю, удаляю перенос строк и всё ок
|
|||
28
Noxvil
17.01.20
✎
20:51
|
(26) в общем - в одном случае с сервера unix приходит
"PNG IHDR , , y}u pHYs ÒÝ~ü OIDATxíÿq9Ò×ý/}HuHtÀr+GðÑÀR#X)#83¹Üciþ@c`ð<U¬õºLÞén¼hئi@µöÔã^ÇÆ3ùëöïZÜßõ¼hkcÌcçÿåeäï¿»ÿoæyÇû¡B¬" с постмана (с домашнего пк на винде) приходит ( и подправив всего 2 пробела (переноса строк)) - файл открывается "‰PNG IHDR , , y}Ћu pHYs ТЭ~ь OIDATxњнќяq9Т†Чэ/}HЃuHЃtЋАr+GрСЉАR#X)‚#83‚№‚ЬcЌiю@cЂ`р<U¬хєL‘љЮйnјhШ¦i@‹µцФг^ЗЖ3щлцпZЬЯхјhkcМcзяџеeдпї»яoљжyЗыЎB¬" Я в этом слабо понимаю, надо преобразовать файл из одной кодировки в другую? Скорее всего UTF-8 > Ansi |
|||
29
Noxvil
17.01.20
✎
20:59
|
если просто в notepad++ сделать, то добвляются лишние символы типо "B" и часть символов становится непохожей
|
|||
30
Garykom
гуру
17.01.20
✎
20:59
|
Content-Encoding из https://ru.wikipedia.org/wiki/Список_заголовков_HTTP
И для бинарный файлов у тебя должно быть не Content-Type: text/plain А нечто более вменяемое image/png для PNG Или же application/octet-stream для всего непонятного бинарного https://developer.mozilla.org/ru/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Полный_список_типов_MIME |
|||
31
Garykom
гуру
17.01.20
✎
21:00
|
(29) Короче у тебя глюки и на этапе отправки и на этапе получения. А с протоколом HTTP и с 1С все замечательно.
|
|||
32
Noxvil
19.01.20
✎
17:42
|
(29) Как подобные проблемы исправляются?
|
|||
33
ДенисЧ
19.01.20
✎
18:01
|
В текстовом редакторе двоичные файлы править - это посильней Фауста будет...
|
|||
34
Noxvil
19.01.20
✎
19:06
|
(33) А по теме есть чем помочь?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |