如何从流/渲染字典中压缩 html 文件?
Posted
技术标签:
【中文标题】如何从流/渲染字典中压缩 html 文件?【英文标题】:How to zip an html file from a stream/rendered dictionary? 【发布时间】:2021-09-16 07:28:31 【问题描述】:我无法通过烧瓶 send_file 下载 html 文件。
基本上,单独下载一个 html 文件,它工作得很好。通过将流作为参数提供给 send_file 函数
但是;我需要将此文件与其他不相关的文件一起放入一个 zip 文件中。在那里,在 write 函数中,流和字符串 (result_html) 都不起作用。我需要以某种方式将其直接转换为 html 文件并放入 zip 文件中
我暂时不知道该怎么做。我将数据(输出)作为字典...
谢谢指点
from flask import render_template, send_file
from io import BytesIO
result_html = render_template('myResult.html', **output)
result_stream = BytesIO(str(result_html).encode())
with ZipFile("zipped_result.zip", "w") as zf:
zf.write(result_html)
# zf.write(other_files)
send_file(zf, as_attachment=True, attachment_filename="myfile.zip")
【问题讨论】:
【参考方案1】:如果我理解正确,将 zip 文件写入流中并将渲染结果作为字符串添加到 zip 文件中就足够了。然后可以通过 send_file 传输流。
from flask import render_template, send_file
from io import BytesIO
from zipfile import ZipFile
# ...
@app.route('/download')
def download():
output = 'name': 'Unknown'
result_html = render_template('result.html', **output)
stream = BytesIO()
with ZipFile(stream, 'w') as zf:
zf.writestr('result.html', result_html)
# ...
stream.seek(0)
return send_file(stream, as_attachment=True, attachment_filename='archive.zip')
【讨论】:
非常感谢,这正是我想要的以上是关于如何从流/渲染字典中压缩 html 文件?的主要内容,如果未能解决你的问题,请参考以下文章