首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:使用django-storage从S3创建zipfile

Django:使用django-storage从S3创建zipfile
EN

Stack Overflow用户
提问于 2020-08-25 02:10:39
回答 1查看 272关注 0票数 2

我使用django-storages,并将用户相关内容存储在S3上的文件夹中。现在我希望用户能够一次下载他们所有的文件,最好是一个zip文件。之前所有与此相关的帖子要么都很旧,要么对我不起作用。

到目前为止,我所拥有的最接近工作的代码是:

代码语言:javascript
复制
from io import BytesIO
import zipfile
from django.conf import settings
from ..models import Something
from django.core.files.storage import default_storage

class DownloadIncomeTaxFiles(View):

    def get(self, request, id):
        itr = Something.objects.get(id=id)
        files = itr.attachments
        zfname = 'somezip.zip'
        b =  BytesIO()
        with zipfile.ZipFile(b, 'w') as zf:
            for current_file in files:
                try:
                    fh = default_storage.open(current_file.file.name, "r")
                    zf.writestr(fh.name, bytes(fh.read()))
                except Exception as e:
                    print(e)
            response = HttpResponse(zf, content_type="application/x-zip-compressed")
            response['Content-Disposition'] = 'attachment; filename={}'.format(zfname)
            return response

这将创建一个看起来像压缩文件的文件,但它唯一的内容是'‘。

我得到了许多不同的结果,主要是错误,如zipfile期望字符串或字节内容,而提供了一个FieldFile。在这一点上,我完全卡住了。

EN

回答 1

Stack Overflow用户

发布于 2020-08-25 17:54:48

问题是我需要恢复到文件的开头,方法是添加

代码语言:javascript
复制
zf.seek(0)

就在返回HttpResponse中的文件之前。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63566438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档