在保存到数据库之前,如何在Django中压缩多个上传的文件?

在保存到数据库之前,如何在Django中压缩多个上传的文件?,django,file-upload,zipfile,Django,File Upload,Zipfile,在使用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/inde

在使用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'
这个问题有什么解决办法吗?由于我可能必须上载包含大文件的文件夹,为此我是否必须编写一个自定义的临时文件上载处理程序?我最近开始和Django一起工作,这对我来说是非常新鲜的。请帮我提些建议。

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



您应该使用open()打开文件,然后读取()它的内容,还应该检查是否正确上载了文件。您还可以使用zip和file的语法

我尝试使用
zipfile.write(upload\u file.file)
读取内存文件的内容。它给了我这个错误:
TypeError:stat:path应该是string、bytes、os.PathLike或integer,而不是_io.BytesIO
我还使用了
zipfile.writestr(upload_file.name,upload_file.read())
。它只使用最新上传的文件创建了一个zip文件(因为我选择了多个要上传的文件)。而且里面的文件也是空的。我真的不明白该怎么办。你应该用open()打开文件,然后读取()它的内容。你还应该检查你是否正确上传了文件。你还可以使用zip和file的语法
InMemoryUploadedFile.open()