django - 如何在 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,它对我来说很新。请帮我一些建议。
解决方案
InMemoryUploadedFile
是一个对象,它包含的不仅仅是文件,您应该打开文件并读取它的内容( InMemoryUploadedFile.file 是文件)
InMemoryUploadedFile.open()
你应该用 open() 打开文件然后 read() 它的内容,你还应该检查你是否正确上传了文件,你也可以使用 zip 和文件的语法 https://www.pythonforbeginners.com/files/with -python 中的语句
推荐阅读
- python - 无需在 Python 中安装驱动程序即可读取 Access 表
- selenium - Python Selenium 点击链接链接
- ios - 如何在swift 5中的完成块内向用户显示警报
- c++ - C++ `std::sort` 指针指向 2D 数据而不复制
- php - 如何在这段代码中很好地结合 php 和 html?
- c# - 无法使用 C# 使用 Office 365 凭据发送电子邮件
- javascript - 尝试从 TS 迁移 JS 时未创建文件
- python - 将字符串的文本文件(不是精确的 dict 格式)转换为具有元组键和浮点值的 dict?
- sql - 如何在没有最大值的情况下获得 SQL Server 上字段的最大值?
- ios - 如何在运行时获取 iOS 中所有可见的 UI 元素?