gpt4 book ai didi

python - 如何在 python Flask 框架中发送 zip 文件?

转载 作者:IT老高 更新时间:2023-10-28 20:39:37 29 4
gpt4 key购买 nike

我有一个 flask 服务器,它从数据库中获取几个不同文件的二进制数据,并将它们放入 python 'zipfile' 对象中。我想使用flask的“send_file”方法将生成的zip文件与我的代码一起发送。

我最初能够通过使用 BytesIO(bin) 作为 send_file 的第一个参数来成功发送非 zip 文件,但由于某种原因,我无法对生成的 zip 文件执行相同的操作。它给出了错误:

'ZipFile'没有缓冲接口(interface)。

如何使用 Flask 将此 zip 文件对象发送给用户?

这是我的代码:

@app.route("/getcaps",methods=['GET','POST'])
def downloadFiles():
if request.method == 'POST':
mongo = MongoDAO('localhost',27017)
identifier = request.form['CapsuleName']
password = request.form['CapsulePassword']
result = mongo.getCapsuleByIdentifier(identifier,password)
zf = zipfile.ZipFile('capsule.zip','w')
files = result['files']
for individualFile in files:
data = zipfile.ZipInfo(individualFile['fileName'])
data.date_time = time.localtime(time.time())[:6]
data.compress_type = zipfile.ZIP_DEFLATED
zf.writestr(data,individualFile['fileData'])
return send_file(BytesIO(zf), attachment_filename='capsule.zip', as_attachment=True)
return render_template('download.html')

最佳答案

BytesIO() 需要传入bytes data,但是一个ZipFile() 对象不是bytes-data;您实际上在硬盘上创建了一个文件

您可以使用 BytesIO() 在内存中创建一个 ZipFile() 作为基础:

memory_file = BytesIO()
with zipfile.ZipFile(memory_file, 'w') as zf:
files = result['files']
for individualFile in files:
data = zipfile.ZipInfo(individualFile['fileName'])
data.date_time = time.localtime(time.time())[:6]
data.compress_type = zipfile.ZIP_DEFLATED
zf.writestr(data, individualFile['fileData'])
memory_file.seek(0)
return send_file(memory_file, attachment_filename='capsule.zip', as_attachment=True)

with 语句确保在您完成添加条目后正确关闭 ZipFile() 对象,使其将所需的预告片写入内存文件目的。 memory_file.seek(0) 调用需要将文件对象的读写位置“倒回”回开始。

关于python - 如何在 python Flask 框架中发送 zip 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337013/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com