我正在尝试重新阅读(重置)一个InputStream
,在阅读其格式后保存图像。
我需要在阅读其格式后将其写入mysql数据库。
似乎在我阅读格式后,InputStream
再次没有ImageReaders
或其他内容。或者读取操作可能会关闭它?
来自ServletFileUpload' s InputStream
FileItem.getInputStream
以下是读取图像格式的代码:
public static String getImageFormat(InputStream inputStream) throws IOException {
ImageInputStream iis = ImageIO.createImageInputStream(inputStream);
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
String extension = null;
while (readers.hasNext()) {
ImageReader read = readers.next();
extension = read.getFormatName();
}
extension = extension.toLowerCase();
switch(extension){
case "jpeg":
extension = "jpg";
break;
case "jpg":
extension = "jpg";
break;
case "png":
extension = "png";
break;
case "gif":
extension = "gif";
break;
case "bmp":
extension = "bmp";
break;
default:
}
return extension;
}
调用getImageFormat
后,即使ImageIO.read(inpustream)也无法再次读取图像。
将InputStream
传递给getImageFormat
以便将数据写入数据库后,我该怎么办?
修改
所有这些都发生在Java Servlet
中答案 0 :(得分:1)
浏览器应设置内容类型标题,以告诉您图像的格式,或其他标题中的文件名。您不必自己检查图像。
但是如果必须,请在BufferedInputStream
周围打一遍mark(4096)
,或者ImageIO
读者从中读取的内容,执行ImageIO
,然后拨打{{ 1}}把它放回原处。如果reset()
读取的内容比您想象的要多,ImageIO
会抛出异常,因此您可以对其进行微调。