Предпочтительно использовать менеджер контекста , например, так:
import zipfile, io
file_like_object = io.BytesIO()
with zipfile.ZipFile(file_like_object, "w", compression=zipfile.ZIP_DEFLATED) as myZipFile:
myZipFile.writestr(u'test.txt', b'test')
# file_like_object.getvalue() are the bytes you send in your http response.
Я записал его в файл. Это определенно действительный zip-файл.
Если вы хотите открыть архив, вам нужно сохранить его на диск. Такие приложения, как Explorer и 7-Zip, не имеют возможности прочитать объект BytesIO, существующий в процессе python
. Они могут открывать только архивы, сохраненные на диске.
Вызов print(r.read())
не собирается открывать архив. Он просто напечатает байты, которые составляют крошечный zip-файл, который вы только что создали.