我设计了一个网页,允许用户上传一个zip文件。我想做的是将这个zip文件作为一个大的二进制对象直接存储到我的sqlite数据库中,然后能够使用zipfile
包将这个二进制对象作为zipfile读取。不幸的是,这不起作用,因为试图将io.BytesIO
中的文件作为二进制字符串传递到zipfile.ZipFile
会给出标题中详细说明的错误。
对于我的MWE,为了更好地演示我的问题,我排除了数据库。
views = Blueprint('views', __name__)
@views.route("/upload", methods=["GET", "SET"])
def upload():
# Assume that file in request is a zip file (checked already)
f = request.files['file']
zip_content = f.read()
# Store in database
# ...
# at some point retrieve the file from database
archive = zipfile.ZipFile(io.BytesIO(zip_content))
return ""
我已经搜索了几天如何解决这个问题没有成功。我甚至在应用.read()
之后打印出zip_content
和io.BytesIO(zip_content)
的内容,它们是完全相同的字符串。
我做错了什么?
解决。使用f.read()
只获取zip文件的名称。我需要使用f.getvalue()
来获取完整的文件内容。