如何在 Django 中压缩多个上传的文件,然后再将其保存到数据库?

Posted

技术标签:

【中文标题】如何在 Django 中压缩多个上传的文件,然后再将其保存到数据库?【英文标题】:How to zip multiple uploaded file in Django before saving it to database? 【发布时间】:2020-02-25 14:53:18 【问题描述】:

我正在尝试在使用 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,它对我来说很新。请给我一些建议。

【问题讨论】:

【参考方案1】:

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

InMemoryUploadedFile.open() 

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

【讨论】:

我尝试使用zipfile.write(upload_file.file) 来读取内存文件的内容。它给了我这个错误:TypeError: stat: path should be string, bytes, os.PathLike or integer, not _io.BytesIO 我也用过zipfile.writestr(upload_file.name,upload_file.read())。它仅使用最新上传的文件创建了一个 zip 文件(因为我选择了多个要上传的文件)。而且文件里面也是空的。我真的不明白该怎么办。 你应该用 open() 打开文件然后 read() 它的内容,你还应该检查你是否正确上传了文件,你也可以使用 zip 和文件 pythonforbeginners.com/files/with-statement-in-python 的语法跨度>

以上是关于如何在 Django 中压缩多个上传的文件,然后再将其保存到数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中压缩对齐APK文件?

在内存中压缩多个目录和文件,而不在磁盘上存储 zip

如何在 Django 中压缩 JSON 请求?

在没有数据持久性的情况下,如何最好地在 Django 中压缩表单:最 Djangonic 的方法是啥? [关闭]

如何在 iOS phonegap 应用程序中压缩 wav 文件

如何在 Ipad 中压缩文件夹