我觉得我遇到的问题很少见,因为我在这里或谷歌上似乎找不到答案。
我的数据库中存储了一些图片,为了提供这些图片,我想压缩它们,将在数据库中创建的ZipFile存储起来,其中有一个AmazonS3存储作为后端。更重要的是,所有这些操作都是在芹菜管理的后台任务中完成的。现在。。。这是我写的代码:
zipname = "{}.zip".format(reporting.title)
with ZipFile(zipname, 'w') as zf:
# Here is the zipfile generation. It quite doesn't matter anyway since this works fine.
reporting = Reporting.objects.get(pk=reporting_id)
reporting.pictures_archive = zf
reporting.save()
我得到错误:
*** AttributeError: 'ZipFile' object has no attribute '_committed'
所以我试着用这种方式将zipfile转换成Django文件:
zf = File(zf)
但它返回一个空对象。有人能帮我吗?我有点卡住了。。。
最佳答案
这并不像我想象的那么复杂。(这可以解释为什么没有人在网上问这个问题)
使用Python3.3,字符串是unicode的,主要使用unicode对象。文件需要字节数据才能正常工作,下面是解决方案:
zipname = "{}.zip".format(reporting.id, reporting.title)
with ZipFile(zipname, 'w') as zf:
# Generating the ZIP !
reporting = Reporting.objects.get(pk=reporting_id)
reporting.pictures_archive.delete()
reporting.pictures_archive = File(open(zipname, "rb"))
reporting.save()