如何确定保存在数据库中的图像是否为.gif,.jpg或.png以显示在servlet上

时间:2010-12-18 13:59:31

标签: java servlets mime-types

我想从数据库中检索图像(MySQL,保存为LongBlob字段)。它们可以是.gif,.jpg或.png图像。从servlet返回客户端需要使用类似的东西来设置内容类型:

response.setContentType("image/gif");

但是,如果图像是gif,这仅适用于所有浏览器。我可以通过读取字节来识别图像是gif还是jpg,还是可以指定处理所有图像的通用ContentType。

4 个答案:

答案 0 :(得分:4)

URLConnection#guessContentTypeFromStream()可识别这三种格式。

InputStream input = resultSet.getBinaryStream("columnname");
response.setContentType(URLConnection.guessContentTypeFromStream(input));
OutputStream output = response.getOutputStream();
// Write input to output.

如果它可能会返回null!contentType.startsWith("image"),那么您希望提供仅"image"的通用图片内容类型。大多数(如果不是全部)webbrowsers都是宽容的。

答案 1 :(得分:2)

您可以检测到一些字节序列。例如,JPEG图像都以FF D8开头。只需使用十六进制编辑器查看一些图像,并在开头检查相似之处。

答案 2 :(得分:2)

所有图片格式都会在文件开头放入签名。将文件保存在数据库中时,您可以继续并计算出值,然后将其另存为另一个数据库列,以便将其缓存以供以后重用。

GIF文件以GIF作为前三个字符开头。同样,PNG文件具有相同的三个字符,JPEG文件以值0xF8 0xD8开头。以下URL列出了图像文件格式的各种签名。 http://www.garykessler.net/library/file_sigs.html

答案 3 :(得分:1)

您可以使用jMimeMagic等第三方库。

同样this link对获取文件的Mime类型的各种方法进行了很好的比较(它包括像:Apache Tika,JMimeMagic等库以及一些代码示例。)