_io.BytesIO' 对象没有小文件的属性 'name'

_io.BytesIO' object has no attribute 'name' for small size file

我正在使用 python/Django 上传文件并获得两个不同的对象。当文件很小时,得到 InMemoryUploadedFile 对象,当文件很大时,我得到 temporaryFileWrapper。我正在使用 magic 库检查文件 MIME 类型。

当文件很大时,使用此代码

得到正确的mime type
file_name = self.cleaned_data.get('file')
file_mime= magic.from_file(file_name.file.name, mime=True)

supported_format= ['video/x-flv','video/mp4','video/3gpp','video/x-ms-wmv']
 if file_mime  in supported_format:
    ...........

但是当文件较小时我收到错误

_io.BytesIO' object has no attribute 'name

对于大文件

对于小文件

根据 Django 的 this doc,Django 有两个上传文件处理程序 MemoryFileUploadHandlerTemporaryFileUploadHandlerMemoryFileUploadHandler 流到内存,TemporaryFileUploadHandler 流到磁盘。

我已经设置默认 TemporaryFileUploadHandler 我是我的 setting.py

FILE_UPLOAD_HANDLERS= ["django.core.files.uploadhandler.TemporaryFileUploadHandler"]

我们也可以在 django 中编写自己的自定义 FileUploadHandler