首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:检查上传的文件是否为jpg

Python:检查上传的文件是否为jpg
EN

Stack Overflow用户
提问于 2008-11-05 21:00:36
回答 4查看 21.5K关注 0票数 15

如何在Python (Google App Engine)中检查用户上传的文件是否是真正的jpg文件?

这就是我到目前为止所走的路:

脚本通过HTML Form Post接收图像,并由以下代码处理

代码语言:javascript
复制
...
incomming_image = self.request.get("img")
image = db.Blob(incomming_image)
...

我找到了mimetypes.guess_type,但它对我不起作用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-11-05 21:17:54

如果您需要的不仅仅是查看扩展名,一种方法是读取JPEG报头,并检查它是否与有效数据匹配。其格式为:

代码语言:javascript
复制
Start Marker  | JFIF Marker | Header Length | Identifier
0xff, 0xd8    | 0xff, 0xe0  |    2-bytes    | "JFIF\0"

因此,快速识别器将是:

代码语言:javascript
复制
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加载它。例如:

代码语言:javascript
复制
from PIL import Image
def is_jpg(filename):
    try:
        i=Image.open(filename)
        return i.format =='JPEG'
    except IOError:
        return False
票数 36
EN

Stack Overflow用户

发布于 2011-04-19 21:34:08

更一般的解决方案是使用Python绑定到Unix的"file“命令。为此,请安装包python-magic。示例:

代码语言:javascript
复制
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()
票数 1
EN

Stack Overflow用户

发布于 2008-11-05 21:29:11

使用PIL。如果它能打开这个文件,那它就是一个图像。

从教程中...

代码语言:javascript
复制
>>> import Image
>>> im = Image.open("lena.ppm")
>>> print im.format, im.size, im.mode
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/266648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档