我想从数据库中检索图像(MySQL,保存为LongBlob字段)。它们可以是.gif,.jpg或.png图像。从servlet返回客户端需要使用类似的东西来设置内容类型:
response.setContentType("image/gif");
但是,如果图像是gif,这仅适用于所有浏览器。我可以通过读取字节来识别图像是gif还是jpg,还是可以指定处理所有图像的通用ContentType。
答案 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等库以及一些代码示例。)