【问题标题】:Why python-magic returns wrong mime-type if file size is too small?如果文件太小,为什么 python-magic 返回错误的 mime 类型?
【发布时间】:2020-10-15 18:35:42
【问题描述】:

如果文件大小小于 5000 字节 (InMemoryUploadedFile)。 此代码不起作用

mime_type = magic.from_buffer(file.read(), mime=True)

它返回错误的 mime_type。 例如,我有一个 cv.docx 文件,大小为 4074 字节。 它返回一个 mime_type:

'application/x-empty'

而不是

'application/vnd.openxmlformats-officedocument.wordprocessingml.document'

您能否建议我解决此案的任何建议?

【问题讨论】:

  • 你解决过这个问题吗?我也面临同样的问题。
  • @ruohola 不,我无法解决这个问题,我尝试使用这个:file.seek(0) mime_type = magic.from_buffer(file.read(), mime=True) 但它没有不行。空文件或 20 KB 以下的文件会发生这种情况

标签: python mime-types python-magic


【解决方案1】:

我也有这个问题。这很可能与文件大小无关,因为我也在 90 字节文本/纯文本文件上测试了 magic.from_buffer,它返回了正确的值。 问题是文件不知何故变空了。在我的情况下,这是因为文件是一个流并且我已经从流中读取(请记住,如果您从流中读取并再次读取,第二次读取将从第一次读取完成的地方开始 - 不像从开始读取每次一个文件)。 这个例子来自flask

mime_type1 = magic.from_buffer(request.stream.read(2048), mime=True) // returns text/plain
mime_type = magic.from_buffer(request.files["file"].stream.read(2048), mime=True) // returns application/x-empty because the stream has already been read from

如果不查看您之前的代码,很难准确诊断,但请检查您在哪里使用该文件并将其注释掉。 你可能需要做类似的事情

file.seek(0)
mime_type = magic.from_buffer(file.read(), mime=True)

【讨论】:

  • 谢谢爱丽丝,我试过你的代码,但它不起作用。没错,这发生在空文件或 20 KB 以下的文件中,尤其是 doc 文件。我发现这不是魔术库的问题。有时 doc 文件可能会返回错误的 mime-type,您可以使用 JavaScript 或其他库来显示 mime-type,您会得到相同的结果
猜你喜欢
  • 2017-10-13
  • 1970-01-01
  • 2016-08-18
  • 2022-01-14
  • 2018-01-03
  • 2011-06-17
相关资源
最近更新 更多