如何从流/渲染字典中压缩 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何[递归]在PHP中压缩目录?

如何使用 postcss 在顺风中压缩文件大小?

在 python 中压缩文件时如何保留目录?

如何在 Ipad 中压缩文件夹

如何在Mac中压缩文件

如何使用 Java 在 SFTP 或 FTP 服务器中压缩文件?