当前位置: 首页 > 面试题库 >

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

马泰
2023-03-14
问题内容

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

这是我现在所走的距离:

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

...
incomming_image = self.request.get("img")
image = db.Blob(incomming_image)
...

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


问题答案:

如果您需要的不仅仅是扩展名,一种方法是读取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


 类似资料:
  • 来自文档:“当您使用传输管理器下载文件时,实用程序会自动确定对象是否为多部分” 来源:https://AWS . Amazon . com/fr/blogs/developer/parallelizing-large-downloads-for-optimal-speed/ 这意味着某处有指标(元数据?属性?)可以告诉你一个文件是否是多部分的。所以在用java SDK测试之前,我正在用AWS CL

  • 问题内容: 我正在使用JAI并使用以下文件创建文件: 我在该行之前检查文件是否存在。但是,如何检查文件是.bmp还是.tiff还是图像文件? 有人知道吗? 问题答案: Image Magick项目具有识别图像的功能,并且有一个用于Image Magick的Java包装器,称为JMagick,我认为您可能需要考虑而不是重新发明轮子: http://www.jmagick.org 我一直在使用Imag

  • 问题内容: 有没有办法确保收到的文件中包含图像? 对扩展程序的测试对我来说并不十分安全,因为您可以上传一个并将其扩展名更改为所需的扩展名。 我也尝试使用,但是可能有一些更适合该特定问题的东西。 问题答案: 获取mimetype的本机方法: 对于PHP <5.3,请使用mime_content_type()对于PHP> = 5.3,请使用finfo_open()或mime_content_type(

  • 问题内容: 我想检查上传的文件是图像文件(例如png,jpg,jpeg,gif,bmp)还是其他文件。问题是,无论您上传哪种文件类型,我都使用Uploadify上传文件,这会更改mime类型并给出“文本/八进制”或类似的mime类型。 除了使用PHP检查文件扩展名之外,是否有其他方法可以检查上传的文件是否为图像? 问题答案: 您可以使用非图像尺寸返回零。

  • 问题内容: 尝试检查我要读取的文件是否存在。 问题答案: 这是另一种方法: 包装的用途和功能: p_DirName in varchar2, – schema object name p_FileName in varchar2 ) return number is l_file_loc bfile; begin l_file_loc := bfilename(upper(p_DirName),

  • 问题内容: 我通过HTTP上载获得文件,并且需要确保它是pdf文件。 编程语言是Python,但这无关紧要。 我想到了以下解决方案: 检查字符串的第一个字节是否为“%PDF”。 这不是一个很好的检查,但是可以防止用户意外上传其他文件。 尝试libmagic(bash上的“文件”命令使用它)。 这与(1)中的检查完全相同 获取一个lib并尝试从文件中读取页数。 如果该库能够读取一个页面计数,则它应该