在Django中检查上传文件的MIME类型

4

我有一个允许用户上传图片的网站。为了检查用户上传的文件的MIME类型,我使用了下面这个脚本,它使用了python-magic库。

import magic
mime = magic.Magic(mime=True)
if mime.from_file(request.FILES['media-pic']) not in ['image/jpeg', 'image/pjpeg', 'image/png', 'image/gif']:
  # don't allow the file to be uploaded

然而,当我尝试上传文件时,出现了错误coercing to Unicode: need string or buffer, TemporaryUploadedFile found。我并不认为这会起作用,但我尝试了request.FILES ['media-pic'] .name,并得到了一个File does not exist 的错误。

在文件保存到服务器之前,我如何检查文件的MIME类型?

1个回答

5

mime.from_file方法需要文件名作为参数,并且根据文件大小,上传的文件可能只存在于内存中。您可以使用mime.from_buffer方法代替,类似于以下内容:

f = request.FILES['media-pic']
# maybe even only read the first X bytes, might be enough for mimetype detection
mimetype = mime.from_buffer(f.read())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接