首页 > 解决方案 > 如何在 Django 中压缩多个上传的文件,然后再将其保存到数据库?

问题描述

我正在尝试在使用 Django 将文件夹保存到数据库/文件存储系统之前对其进行压缩。对于这个任务,我正在使用 ZipFile 库。这是view.py的代码:

class BasicUploadView(View):
    def get(self, request):
        file_list = file_information.objects.all()
        return render(self.request, 'fileupload_app/basic_upload/index.html',{'files':file_list})

    def post(self, request):
        zipfile = ZipFile('test.zip','w')
        if request.method == "POST":
            for upload_file in request.FILES.getlist('file'): ## index.html name
                zipfile.write(io.BytesIO(upload_file))
                fs = FileSystemStorage()
                content = fs.save(upload_file.name,upload_file)
                data = {'name':fs.get_available_name(content), 'url':fs.url(content)}
            zipfile.close()
        return JsonResponse(data)

但我收到以下错误:

TypeError: a bytes-like object is required, not 'InMemoryUploadedFile'

这个问题有什么解决办法吗?由于我可能需要上传包含大文件的文件夹,我是否必须为此编写自定义 TemporaryFileUploadHandler ?我最近开始使用 Django,它对我来说很新。请帮我一些建议。

标签: djangofile-uploadzipfile

解决方案


InMemoryUploadedFile是一个对象,它包含的不仅仅是文件,您应该打开文件并读取它的内容( InMemoryUploadedFile.file 是文件)

InMemoryUploadedFile.open() 

你应该用 open() 打开文件然后 read() 它的内容,你还应该检查你是否正确上传了文件,你也可以使用 zip 和文件的语法 https://www.pythonforbeginners.com/files/with -python 中的语句


推荐阅读