确定图像扩展名

时间:2015-08-14 07:10:51

标签: java spring

我正在开发一个Web应用程序,它具有显示从服务器获取的图像的功能。我了解到我可以通过返回字节数组来做到这一点。

似乎我能够通过以下方式完成:

@RequestMapping(value = "url/img", method = RequestMethod.POST)
@ResponseBody
public MyDto proceedDocumentFromUrl(@RequestParam final String url) throws IOException {
    return somethingDoer.do(toByteArray(new URL(url).openStream());
}

somethingDoer.do在名为byte[]的字段中返回包含image的Dto对象。出于测试目的,我想确定图像扩展名(它总是.jpg)。

我该怎么做?我在Wiki和W3文档中寻找一些线索(我想这是前几个字节),但无法找到解决方案。

1 个答案:

答案 0 :(得分:0)

请检查此getFormatName(file)方法并查看Class ImageReader

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

public class Main {
  public static void main(String[] argv) throws Exception {
    File file = new File("image.gif");
    System.out.println(getFormatName(file));

    InputStream is = new FileInputStream(file);
    is.close();
    System.out.println(getFormatName(is));
  }
  private static String getFormatName(Object o) {
    try {
      ImageInputStream iis = ImageIO.createImageInputStream(o);
      Iterator iter = ImageIO.getImageReaders(iis);
      if (!iter.hasNext()) {
        return null;
      }
      ImageReader reader = (ImageReader) iter.next();
      iis.close();

      return reader.getFormatName();
    } catch (IOException e) {
    }
    return null;
  }
}

请检查https://github.com/arimus/jmimemagic以获取byte[]

的扩展程序
byte[] data = someData
MagicMatch match = Magic.getMagicMatch(data);
System.out.println( match.getMimeType());