【发布时间】:2012-02-24 17:24:23
【问题描述】:
我正在按照 App Engine 图片 API 文档中的说明进行图片上传,使用 getServingUrl() 生成上传网址,然后将请求转发给我自己的处理程序。我想知道是否有办法验证上传的 blob 实际上是图像,还是我必须读取字节并使用它来确定文件类型。
【问题讨论】:
我正在按照 App Engine 图片 API 文档中的说明进行图片上传,使用 getServingUrl() 生成上传网址,然后将请求转发给我自己的处理程序。我想知道是否有办法验证上传的 blob 实际上是图像,还是我必须读取字节并使用它来确定文件类型。
【问题讨论】:
大多数图像文件在字节中都有一个很容易找到的幻数或签名,并且可能比尝试解码整个图像更快(即尝试使用调整大小操作;因为这可能会在 NOT 上快速失败一个图像,但如果它是一个图像,它实际上会执行操作)。
我怀疑您真正想要支持的图像类型数量有限;以下是维基百科上的一些幻数示例:
http://en.wikipedia.org/wiki/Magic_number_%28programming%29#Magic_numbers_in_files
【讨论】:
new BlobstoreInputStream(BlobKey blobKey).read(byte[] b, int off, int len) 可以读取幻数数据
在 Python 中,您可以使用图像 API 对 blob 数据执行简单的转换(调整大小),如果 blob 不是图像,则会引发 NotImageError。 Java 中可能有一个等价物。
【讨论】: