2015-07-19 50 views
1

我有一个包含Word文档和PDF文档的URL列表。 我想获得所有这些信息并创建一个包含所有文档的zip文件,然后可以下载(使用application/zip MIME类型创建Flask响应)。 我有以下代码,其中仅返回一个0字节zip文件:0字节邮编档案

allLinks = [...] 
for link in allLinks: 
with zipfile.ZipFile('Documents.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zip: 
    response = requests.get(link, headers=headers, stream=True) 
    filename = urllib.parse.unquote(response.headers.get('content- disposition').replace("attachment; filename*=UTF-8",                      "").replace("''", "").encode('latin-1').decode('utf-8')) 
if response.status_code == 200: 
    zip.writestr(filename, response.content)  
return zip 

的压缩文件是不含有任何事情。我的回报声明被迅速转发。我虽然使用线程,但我不太确定这是否是解决方案以及如何继续。

回答

1

您将要覆盖每个迭代与mode='w' pening因此,如果最后的URL不会返回200你会得到一个空的zip文件,ST最好你只会得到最后zip.writestr

打开外循环:

allLinks = [...] 
with zipfile.ZipFile('Documents.zip', mode='w', compression=zipfile.ZIP_DEFLATED) as zp: 
    for link in allLinks: 
+0

谢谢。但我仍然得到一个0字节的档案。它似乎并没有像所有的链接加载和文件压缩。如果我很幸运,它会设法从所有链接中只压缩一个文档。 – fae53351b9effc708e764e871bef31