如何在Python (Google App Engine)中检查用户上传的文件是否是真正的jpg文件?
这就是我到目前为止所走的路:
脚本通过HTML Form Post接收图像,并由以下代码处理
...
incomming_image = self.request.get("img")
image = db.Blob(incomming_image)
...
我找到了mimetypes.guess_type,但它对我不起作用。
发布于 2008-11-05 21:17:54
如果您需要的不仅仅是查看扩展名,一种方法是读取JPEG报头,并检查它是否与有效数据匹配。其格式为:
Start Marker | JFIF Marker | Header Length | Identifier
0xff, 0xd8 | 0xff, 0xe0 | 2-bytes | "JFIF\0"
因此,快速识别器将是:
def is_jpg(filename):
data = open(filename,'rb').read(11)
if data[:4] != '\xff\xd8\xff\xe0': return False
if data[6:] != 'JFIF\0': return False
return True
但是,这不会在正文中捕获任何坏数据。如果你想要一个更健壮的检查,你可以尝试用PIL加载它。例如:
from PIL import Image
def is_jpg(filename):
try:
i=Image.open(filename)
return i.format =='JPEG'
except IOError:
return False
发布于 2011-04-19 21:34:08
更一般的解决方案是使用Python绑定到Unix的"file“命令。为此,请安装包python-magic。示例:
import magic
ms = magic.open(magic.MAGIC_NONE)
ms.load()
type = ms.file("/path/to/some/file")
print type
f = file("/path/to/some/file", "r")
buffer = f.read(4096)
f.close()
type = ms.buffer(buffer)
print type
ms.close()
发布于 2008-11-05 21:29:11
使用PIL。如果它能打开这个文件,那它就是一个图像。
从教程中...
>>> import Image
>>> im = Image.open("lena.ppm")
>>> print im.format, im.size, im.mode
https://stackoverflow.com/questions/266648
复制相似问题