#0
by Crush
От сервера получаю строку, запакованную gzip. Как распаковать?. Вместе со строкой есть еще и stream в виде ComSafeArray, где каждый элемент - это аскии-код символа той же самой строки. Пробовал через base64 в файл записать, но всё равно фигня какая то получается. Поиск только php-функции для распаковки предлагает.
#2
by sash-ml
запиши в текстовый файл с расширением zip. открой проводником. при открытии такого архива в нем будет один файл без расширения совпадающий с именем архива. Если ок. то дальше ЧтениеZipФайла
#3
by Crush
Неполучится. У файла зип-архива есть заголовки и прочее. А уменя только упакованная строка. На php это делается так: string gzencode ( string $data [, int $level = -1 [, int $encoding_mode = FORCE_GZIP ]] ) В браузерах встроенные энкодеры. В cURL-е тоже есть распаковщик. А в 1С я хз как реализовать. Алгоритм распаковки самому писать совсем не хочется.
#4
by sash-ml
получится, если нет заголовков, то там будет один файл без расширения совпадающий с именем архива
#5
by Crush
Блииин!!! Ты прав!!!! Спасибо!!! Вчера пробовал, не взлетело. Сейчас попробовал - получилось. Но, всё же вопрос остаётся. Т.к. распаковать как то можно без использования файловой системы.
#6
by sash-ml
варианты еще такие, вывести на форму поле ХТМЛ документа и попробовать там через JS Найти СОМобъект который работает с гЗИП например gzip.DeflateStringENC gzip.InflateStringENC
#7
by Crush
Форма - не вариант. Распаковка на сервере в регламентном задании будет. Я пока Compression API ковыряю.
#12
by Crush
Косякус. 1С-овский ЧтениеZipФайла не может работать с этим архивом, а far и 7-zip могут.
#13
by sash-ml
печаль, тогда нужно что-то вроде ЗапуститьПриложение("unzip myfile",каталог), но это уже костыль на костыле.
#18
by Crush
Ругается на неверный формат файла Ага. Причём только через ЗапуститьПриложение и получается. А через Shell нивкакую WshShell = Новый COMObject("WScript.Shell"); Сообщить(WshShell.Run("""C:Program Files7-Zip7z.exe"" x D: mepgzip1 -so>d:3",0,1));
#19
by Serginio1
Можешь скинуть ссылку на ресурс? Посмотрю и может другим польза будет. И пример то, чего вытаскиваешь.
#20
by kirillkr
, Олег, а что из себя представляют функции ПолучитьТипыДляФайлов, СоздатьОбъект и ПолучитьТип
#21
by Crush
Какой ресурс? Пример - это строка сжатая gzip. Нашел пока убогий вариант средствами WScript.Shell 1. Создаю bat-ник со строкой распаковки "C:Program Files7-Zip7z.exe" x d:1.zip -so>d:1.txt 2. Запускаю батник WshShell.Run("d:1.bat",0,1); 7zip в этом случае не ругается и трабатывает как надо. Распакованный текст получаю. Окошко консоли не появляется. Но, блин, жуть как криво получается:(
#22
by Serginio1
Любой ресурс который возвращает сжатую строку Смотри Это обертка над методами NetObjectToIDispatch45 врап=новый COMОбъект("NetObjectToIDispatch45");
#24
by Crush
Нашел клёвую штуку comобъект("Chilkat.Gzip"), но она триальная на 30 дней, а дальше 149$. Ссылку на конкретный ресурс не могу дать, а других не знаю:( system.io.compression.gzipstream - эта штука - это то, что надо, но с обёрткой у меня пока туго. Видимо придётся завтра курить эту тему.
#27
by Serginio1
Еще раз дай ресурс я протестирую и выложу с использованием HTTPClient итд. Там 3-5 строк кода.
#29
by Serginio1
Кстати можно автоматически разархивировать HttpClientHandler handler = new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }; using (var client = new HttpClient(handler)) }
#31
by Serginio1
uriSources подставь свой. По поводу OR то напишу. Но можно использовать варианты Как здесь или Напишу во врапере OR а то оченьчасто встречается
#39
by Crush
Что то не понимаю как переделать код под System.IO.Compression.GZipStream И у меня пустой Ком-объект на выходе
#40
by Crush
В мсдн говорят, что сборка в system.dll Хотя есть отдельная библиотека System.IO.Compression.dll, но с ней тоже пустой ком-объект.
#43
by Crush
А как правильно параметр передать? Compression=Врап.СоздатьОбъект("System.IO.Compression.GZipStream[ГзипСтрока]"); по причине: Произошла исключительная ситуация (NetObjetToIDispatch45): неверный тип System.IO.Compression.GZipStream[ГзипСтрока] Compression=Врап.СоздатьОбъект("System.IO.Compression.GZipStream"); по причине: Произошла исключительная ситуация (mscorlib): Конструктор для типа "System.IO.Compression.GZipStream" не найден.
#44
by Garykom
через "," уже параметры передаешь поток нужно передать и "тип" CompressionMode.Decompress
#46
by Crush
по причине: Произошла исключительная ситуация (mscorlib): Невозможно загрузить файл или сборку "CompressionModeDecompress)" или один из зависимых от них компонентов. Неправильный указатель (Исключение из HRESULT: 0x80004003 (E_POINTER))
#47
by Crush
И так не прёт:( Какой правильный синтаксис? хз2 = врап.СоздатьОбъект("System.IO.Compression.GZipStream",ГзипСтрока, CompressionModeDecompress);
#48
by Garykom
правильно, только "ГзипСтрока" - нужно на основе строки создать поток(stream) и "CompressionModeDecompress" - вот это ПолучитьТип
#50
by Crush
по причине: Произошла исключительная ситуация (NetObjetToIDispatch45): Ссылка на объект не указывает на экземпляр объекта.
#52
by Crush
по причине: Произошла исключительная ситуация (mscorlib): Конструктор для типа "System.IO.Compression.GZipStream" не найден.
#53
by Crush
по причине: Произошла исключительная ситуация (NetObjetToIDispatch45): неверный тип System.IO.Compression.GZipStream
#55
by Crush
+ На этом пока и закончу. Ком-объект есть, правда по свойствам и не очень похожий на GZipStream, но имя и пространство имён правильные. Осталось придумать как туда пихнуть поток и получить исходящий распакованный поток. Вот я думаю, может поток в данном случае нужно подругому формировать. Средствами тогоже фреймворка, а не COMОбъект("ADODB.Stream")?
#57
by Serginio1
Во первых что ты собрался разархивировать? Зачем тебе ADODB.Stream если есть FileStream Завтра напишу. А 30 пробовал?
#59
by Garykom
ТСу практически бесполезны эти ссылки, а когда выучит C# и .Net сам все что нужно найдет из строки в строку ему нужно, далее сам сделает что надо
#61
by Serginio1
Блин разбудили. Вот алгоритм сжатия строки и результат в Base64 и обратный процесс стр = "Строка для теста компрессии декомпрессии";
#64
by Serginio1
При чем если использовать И приходит ответ HTTP/1.1 200 OK Кстати общий размер раскодированной строки 87 624 Так, что можно использовать на тонких каналах
#65
by Crush
пробовал. Строка не та на выходе получилась. Неделю на больнично был. Сейчас всё заново перепробую.
#66
by Shamandafil
А может стоит передать заголовок Accept-Encoding: identity Указав, что клиент может получать только несжатые данные.
#67
by Crush
Исключено:) Клиенту должны отправляться сжатые данные, и распаковка должна проходить на стороне клиента.
#68
by Crush
Автор, ты ГЕНИЙ!!! Спасибо огромное!!! Вот рабочий код. В файле лежит сжатая строка. &НаКлиенте
#69
by Shamandafil
Здесь ADODB.Stream лишний. Почему System.IO.FileStream не использован, можно было на переупаковках сэкономить. И потоки зря не закрыты после использования.
#70
by Crush
ADODB.Stream здесь только для теста (что б вытащить строку из файла) А так то сжатый массив получаю из WinHttp.WinHttpRequest.5.1 WinHttp.responseBody
#75
by Serginio1
Телодвижений значительно меньше. А если приходит ответ Content-Encoding: gzip То должен автоматически разжиматься как в 30
#76
by Crush
Попробую с ним разобраться как заголовки передавать и POST-запрос. т.е. ресурс сам не закрывается при выходе из процедуры? Или это от того, что переменная врап - глобальная?
#78
by Garykom
неа, для 1С-ника проще с .Net разобраться чем с C++ и написанием своих ВК или аналогов
#79
by Serginio1
А они автоматически передаются HttpClient=Врап.ПолучитьТипИзСборки("System.Net.Http.HttpClient","System.Net.Http.dll");
#80
by Serginio1
Особенность .Net в том, что если ты не закрыл ресурсы, то они закроются только после сборки мусора, а этот момент может наступить не скоро
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- ТЗ. Удаление строки сдвигает строки?
- RARUSLIB.DLL - распаковка архива... не получается, помогите!
- для строки области таб дока с автовысотой не считается высота строки
- как из строки убрать символ перевода строки?
- Динамический список - выделенные строки - суммирование содержимого строки..
- Таблица Значений отбор по индексу, номеру строки, как найти строки 1-100
- v7: 1с77 Portable (Портабельная) - распаковка/упаковка файла exe
В этой группе 1С
- ТИИ ошибки
- УФ. Вывод картинки номенклатуры в отчете на СКД
- БП2.0 Декларация по налогу на прибыль - ошибки
- Бесшовная интеграция с ДО и доп реквизиты
- ЗУП 2.5, отчет "Свод начисленной зарплаты организаций"
- Консоль отчетов, временные таблицы.
- БП 3.0 Не получается исправить закрытие месяца
- БП 3.0. 70 счет. Скрываем данные
- "Решение" - Не устанавливается УТМ для ЕГАИС
- Взносы ФСС с договоров ГПХ
- Конвертация данных. Поставление значения в базе-приемнике.
- Авторегистрация в плане обмена с условием
- Передача параметра из источника в приемник
- Вопрос по ЭЦП и менеджеру криптографии
- Как скрыть шапку колонки в ТЧ
- СКД. Разность группировок одного уровня в верхнюю группировку. Как?
- Помогите с доработкой запроса (БП 3.0)
- Работа с хранилищем значений из внешней обработки
- Не сохраняет reg query результат в файл
- v8.3: запуск нужной базы 1 С через батник