Gzip проблема магического числа при распаковке

2

Я получаю строковый результат из веб-службы и анализирую его с помощью следующего кода:

 public static T FromXmlString<T>(string xml)
    {
        T xmlClass = default(T);


            using (TextReader reader = new StringReader(xml))
            {
                try
                {
                    xmlClass =
                        (T)new XmlSerializer(typeof(T)).Deserialize(reader);
                }
                catch (InvalidOperationException e)
                {
                    //
                }
            }


        return xmlClass;
    }

В результате получается сжатая строка, после разбора я пытаюсь распаковать ее с помощью следующего кода

  byte[] bytes = Convert.FromBase64String(voucher.Document.Value);
              using (var compressedStream = new MemoryStream(bytes))
  using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
  using (var resultStream = new MemoryStream())
        {
            zipStream.CopyTo(resultStream);
            return File(resultStream.ToArray(), "application/pdf", "voucher.pdf");
        }

Но я терплю неудачу каждый раз. Выдает следующую ошибку: "Магическое число в заголовке GZip неверно. Убедитесь, что вы передаете поток GZip".

Я знаю, что есть много вопросов, подобных этому. Я попробовал все ответы в следующих ссылках:

Строка сжатия/декомпрессии с С#

Ошибка распаковки gzipstream - неверное магическое число в заголовке GZip

https://social.msdn.microsoft.com/Forums/vstudio/en-US/21901efe-8d36-40ed-9dad-2ce9968b4273/the-magic-number-in-gzip-header-is-not-correct-error? форум = csharpgeneral

Но не получил никакого результата. Так, ребята, у вас есть идея, почему я получаю эту ошибку. Что не так с моим кодом?

Заранее спасибо!

  • 0
    Как начинается строка base64? Должно быть довольно легко сказать, действительно ли это представляет gzip ...
  • 0
    @JonSkeet "eJy0 / WOQbF22BoyWbZu7bNu2bdu27apddtUu27Zt27b9vd19ug + / ..." вот так
Показать ещё 6 комментариев
Теги:

1 ответ

0
Лучший ответ

Я обнаружил проблему. Изучив больше, я нашел это:

Почему мой С# gzip создает файл большего размера, чем Fiddler или PHP?

И я использовал Ionic.Zlib libray. С помощью этого я могу распаковать и получить оригинальный файл без каких-либо проблем.

Вот мой фрагмент кода:

     byte[] bytes = Convert.FromBase64String(voucher.Document.Value);
     var zippedStream = new MemoryStream(bytes);
     var decompressed = new MemoryStream();
     zOut = new ZlibStream(decompressed, Ionic.Zlib.CompressionMode.Decompress, 
true);
      CopyStream(zippedStream, zOut);
      byte[] byteArray = decompressed.ToArray();
      return File(byteArray, "application/pdf", "voucher.pdf");

Функция CopyStream:

 static void CopyStream(System.IO.Stream src, System.IO.Stream dest)
    {
        byte[] buffer = new byte[1024];
        int len;
        while ((len = src.Read(buffer, 0, buffer.Length)) > 0)
            dest.Write(buffer, 0, len);
        dest.Flush();
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню