Как создать и отправить ZIP-архив из C # в Python и сохранить в файловую систему? - PullRequest
0 голосов
/ 26 февраля 2019

В C # я создаю zip-архив с несколькими файлами:

using (MemoryStream ms = new MemoryStream())
{
    using (ZipStorer zip = ZipStorer.Create(ms, "comment"))
    {
        zip.EncodeUTF8 = true;
        foreach (FileInfo logFile in logFiles)
        {
            zip.AddFile(ZipStorer.Compression.Deflate, logFile.FullName, logFile.Name, "");
        }
    }
    this.logger.log("memory stream to array");
    zipBytesArr = ms.ToArray();
}

Это работает, потому что когда я сохраняю zip-архив на сервере с C # - я могу открыть его.

File.WriteAllBytes("C:\\test.zip", zipBytesArr);

Теперь я отправляю его как массив байтов zipBytesArr в запросе POST, создаю объект с типом поля byte[], затем сериализую его в JSON и отправляю.

MyObject myObject = new MyObject()
{
    // .. some fields
    ZipFileBytesArr = ZipFileBytesArr
};
var json = JsonConvert.SerializeObject(myObject);

Теперь я хочу получить его вPython 3 (колба), я получил длинную строку и хочу создать zip-архив.У меня вопрос: как этого добиться?

Я пробовал что-то вроде этого:

bytes_as_str = "UEsDBBQAAAgIACyrWk4qVSmD0gYAAA4WAAAYAAAAMjAxOTAyMjZfb3BlbnZ...."
bytes_as_bytes = bytes_as_str.encode(encoding="utf-8")
file = zipfile.ZipFile(io.BytesIO(bytes_as_bytes))

и это не работает, я получил ошибку:

zipfile.BadZipFile: File is not a zip file
...