我正在开发一个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文档中寻找一些线索(我想这是前几个字节),但无法找到解决方案。
答案 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());