Python:通过返回块生成gzip字符串

3 投票
2 回答
1068 浏览
提问于 2025-04-16 16:28

我想问一个我在Stackoverflow上找不到的问题。 我正在做一些Django的项目,最近发现我可以用生成器来流式传输HTTP输出。 正常情况下,一个页面的输出效果很好,但我想用GZip压缩来流式传输页面的输出。

我试过使用简单的zlib.compress函数,但没有成功。这个函数生成的小gzip文件不太合适。

我想在处理数据时,返回小块数据,作为字符串。这些小块应该组成一个Gzipped文件的内容。请问该怎么做呢?谢谢。

2 个回答

0

内容压缩是你的网站服务器的一个功能,而不是框架本身的功能。如果你使用的是Apache服务器,可以使用mod_deflate这个模块。希望你不是在说Django提供的简单服务器,因为那个主要是用来测试的。如果你真的是在说那个服务器,那就看看代码里有没有提到gzip这个词,看看它是否有做任何压缩。

另外,如果你在考虑在应用服务器上进行压缩,建议你小心点,最好把这个工作交给网站服务器去做。

2

使用 zlib.compressobj([level]) 来创建一个压缩对象,然后用 Compress.compress(string) 来压缩字符串,最后用 Compress.flush([mode]) 来完成压缩。

import zlib
def compress(chunks):
    c = zlib.compressobj()
    for chunk in chunks:
       yield c.compress(chunk)
    yield c.flush(zlib.Z_FINISH)

撰写回答