Для всех, кто сталкивается с этой проблемой, например, при сохранении байтового массива на диск и получении поврежденного zip-файла, я нашел ответ с помощью Дениса Третьякова.
По сути, при загрузке octet-stream, первый раздел которого посвящен структуре zip-файла. В моем случае первый раздел zip-файла был:
- c7c2ad44-881 c -47c4-89e5-323f91b75269 Content-Disposition: form-data; name = "deb08d79-372d-4de2-a684-1298f25fecd9_20200310142909.zip" Content-Type: application / octet-stream
И после этого после переноса строки появляются фактические данные для zip-файла.
В итоге я вычислил количество байтов в секции «header», преобразовав массив байтов в строку:
string stringEncodedBytes = Encoding.ASCII.GetString(response.RawBytes);
Затем, зная начальную точку данных zip-файла, нашел индекс начальная точка:
int headerSectionIndex = stringEncodedBytes.IndexOf("PK");
Как только я нашел индекс, который в моем случае всегда равен 178, я просто удалил эту часть байтового массива, а затем скопировал обрезанный байтовый массив в новый байтовый массив. и запишите его на диск:
byte[] trimmedFileBytes = new byte[response.RawBytes.Length - headerSectionIndex];
Array.Copy(response.RawBytes, headerSectionIndex, trimmedFileBytes, 0, trimmedFileBytes.Length);
File.WriteAllBytes(filePath, trimmedFileBytes);
Я бы посоветовал всем, кто борется с той же проблемой, открыть «поврежденный» zip-файл в notepad ++ и взглянуть на первый раздел, а затем определить, где находится раздел данных. zip-файла начинается.
Исходные данные zip-файла выглядят так:
и усеченные данные zip-файла выглядит так: