获取格式后如何重置或重用InputStream

时间:2017-02-09 02:32:49

标签: java mysql

我正在尝试重新阅读(重置)一个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

1 个答案:

答案 0 :(得分:1)

浏览器应设置内容类型标题,以告诉您图像的格式,或其他标题中的文件名。您不必自己检查图像。

但是如果必须,请在BufferedInputStream周围打一遍mark(4096),或者ImageIO读者从中读取的内容,执行ImageIO,然后拨打{{ 1}}把它放回原处。如果reset()读取的内容比您想象的要多,ImageIO会抛出异常,因此您可以对其进行微调。