【问题标题】:_io.BytesIO' object has no attribute 'name' for small size file_io.BytesIO' 对象没有小文件的属性“名称”
【发布时间】: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


【解决方案1】:

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

我已将TemporaryFileUploadHandler 设为默认@我的setting.py

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

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

【讨论】:

    猜你喜欢
    • 2022-01-17
    相关资源
    最近更新 更多