Я вижу несколько ошибок в коде.
Проблема, которая вызывает сообщение об ошибке, состоит в том, что то, что вы не конвертируете в строку base 64, это не сжатые данные (memStream.ToArray()
), а данные, которые вы записали в поток zip (imageBytes
). При попытке разархивировать данные, которые не были заархивированы, вы получаете сообщение об ошибке.
Другая серьезная проблема заключается в том, что вы читаете только часть данных из потока zip, поскольку вы используете размер сжатых данных в качестве размера для чтения из потока zip.
Кроме того, вы игнорируете результат метода Read
. Он возвращает количество байтов, которое было фактически помещено в массив, которое может быть меньше, чем количество запрошенных байтов. Поскольку метод Read
не должен возвращать все доступные данные, вы должны выполнять цикл до тех пор, пока не получите все данные из потока. Метод Read
вернет ноль, если больше нет данных для чтения.
Другая проблема заключается в том, что вы пишете в массив, который используете в качестве внутреннего конца для потока памяти, из которого вы читаете. Поскольку распакованные данные обычно больше, чем сжатые, вы будете перезаписывать данные быстрее, чем сможете их прочитать. Однако, поскольку распакованные данные не помещаются в массив, вы все равно не сможете их использовать.