如何使用 zipfile 和 urllib2 导出多个图像 - django

Posted

技术标签:

【中文标题】如何使用 zipfile 和 urllib2 导出多个图像 - django【英文标题】:how can I export multiple images using zipfile and urllib2 - django 【发布时间】:2017-02-04 19:42:14 【问题描述】:

我正在尝试将多个图像文件添加到我的 zip 中。 我四处搜索并知道如何添加一个。我尝试循环遍历多个图像然后写入它,但它不起作用。

我对 txt 格式做了同样的事情,我可以将一些文件压缩到 zip 中,但在使用图像时却不能。

有人可以帮帮我吗? 提前致谢。

# get all photos in db which will be a queryset as result
photos = Photo.objects.all()

# loop through the queryset
for photo in photos:
    # open the image url
    url = urllib2.urlopen(photo.image.url)
    # get the image filename including extension
    filename = str(photo.image).split('/')[-1]
    f = StringIO()
    zip = ZipFile(f, 'w')
    zip.write(filename, url.read())
zip.close()
response = HttpResponse(f.getvalue(), content_type="application/zip")
response['Content-Disposition'] = 'attachment; filename=image-test.zip'
return response

这会给我最后一张我能明白为什么的图片。

【问题讨论】:

【参考方案1】:

不要在每次迭代中创建新的 zip 文件。相反,将所有文件写入同一个存档(您在 循环之前对其进行实例化):

f = StringIO()
zip = ZipFile(f, 'w')

for photo in photos:
    url = urllib2.urlopen(photo.image.url)
    filename = str(photo.image).split('/')[-1]
    zip.write(filename, url.read())
zip.close()

【讨论】:

天哪!我将f = StringIO() 移出循环并没有工作,但我没有想到zip = ZipFile(f, 'w') thx thx atone

以上是关于如何使用 zipfile 和 urllib2 导出多个图像 - django的主要内容,如果未能解决你的问题,请参考以下文章

python urllib2导出elasticsearch数据时 返回 "urllib2.HTTPError: HTTP Error 500: Internal Server Error&q

java.util.zip - ZipInputStream v.s. ZipFile的

如何使用 ZipFile API 压缩文件和文件夹

如何使用 python 提取封闭的 zip

如何检查 zip 文件是不是使用 python 的标准库 zipfile 加密?

如何使用 Urllib2 更有效地抓取?