我正在尝试将多个图像文件添加到我的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
这会给我最后一张图片,在某种程度上我可以看到原因。
答案 0 :(得分:2)
不要在每次迭代中创建新的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()