BytesIO()
需要传递 字节数据 ,但ZipFile()
对象不是字节数据;您实际上在 硬盘上 创建了一个文件。
您可以ZipFile()
使用BytesIO()
作为基础 在内存中创建一个:
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)
电话是需要“倒带”文件对象回到开始的读写位置。