|   |   | 
| 
 | парсинг файла, лишний пробел 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) А по теме есть чем помочь?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |