Учитывая фрагмент вашего кода ...
@blueprint.route("/compressed-post", methods=["POST"])
def compressed_post():
if request.method == "POST":
file = request.files["compressed"]
... вам просто нужно передать file._file
в конструктор ZipFile
, поскольку ZipFile
ожидает файловый объект ( или полный путь, которого здесь нет, поскольку файл еще не был сохранен на диск).
Затем вы можете использовать метод ZipFile
s extractAll
для извлечения файлов по пути, который вы например.
См. также
https://docs.python.org/3/library/zipfile.html#zipfile .ZipFile.extractall
Итак, полный код должен выглядеть примерно так:
from flask import request, Blueprint, make_response
import gzip
from zipfile import ZipFile
blueprint = Blueprint("blueprint", __name__)
@blueprint.route("/compressed-post", methods=["POST"])
def compressed_post():
if request.method == "POST":
file = request.files["compressed"]
zip_handle = ZipFile(file._file)
zip_handle.extractall(CHOOSE_YOUR_PATH)
zip_handle.close()
return make_response("", 200)
else:
return make_response("", 400)
ZipFile
также имеет контекстный менеджер, если вы предпочитаете синтаксис with
.
Предупреждение: _
в file._file
указывает, что _file
не является частью интерфейс publi c и может измениться в будущем.