将多个HTTP文件请求流式传输到Django中的压缩响应流

时间:2016-02-25 12:34:33

标签: python django zipfile

我的问题在本质上与this very helpful answer类似,但我想同时进出。

我有一个django应用程序,用于存储对外部http文件服务器上的文件的引用。现在,当用户请求zip集合时,它会执行以下操作(伪):

generate session_id
for url in url_list:
    download file to sessionid/filename.ext
for file in session_id folder:
    zip.write
close
http response

显然这不太理想,因为:1。需要清理,2。慢和3.导致用户看到任何下载进度之前的长时间延迟。

我无法重新编码的位是io buffer /" file like object"。 Zipfile在写入时查找文件,但我想提供一个流。简而言之,我如何将requests传递给zipfileHttpResponse

1 个答案:

答案 0 :(得分:0)

您可以将writestr命令与流文件下载一起使用,我建议使用requests library

Zipfile.writestr Documentation

ZipFile.writestr(zinfo_or_arcname, bytes[, compress_type])

编辑:示例

zipinfo = ...
zip = ...

for url in list:
    r = requests.get(url, stream=True)
    for line in r.iter_lines():
        # filter out keep-alive new lines
        if line:
            print(zip.writestr(zipinfo, line))