【发布时间】:2019-01-24 05:26:30
【问题描述】:
我正在使用 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
对于大文件
对于小文件
【问题讨论】:
-
看起来您更改了
file的类型。在第一个示例中,它是一个文件写入器,在第二个示例中,它是一个bytesIO对象。所以我认为第一个电话显然有一些副作用。 -
不,两种情况下的文件类型都是相同的。只是大小不同。
-
不是文件类型。事实上,文件根本没有类型,我的意思是 object type 是不同的。所以这意味着执行导入的程序看起来有问题。它要么有副作用,要么
magic库没有关于输出类型的约定。 -
是的,我也很困惑,为什么
object type不同而文件相同。 -
@Akhilendra yadav 你能添加一个 re-producible sn-p 吗?
标签: django python-3.x file-upload temporary-files bytesio