不介绍了 上代码
通过文件byte前缀判断类型
/**
* 获取图片后缀类型
*
* @param imgUrl 图片链接或本地路径
* @return 带.的后缀 比如.gif .png .jpg
*/
public static String getImageType(String imgUrl) {
if (imgUrl.startsWith("http")) {
BufferedInputStream bis = null;
HttpURLConnection urlconnection = null;
String prefix;
try {
URL url = new URL(imgUrl);
urlconnection = (HttpURLConnection) url.openConnection();
urlconnection.connect();
bis = new BufferedInputStream(urlconnection.getInputStream());
String imageTypes = HttpURLConnection.guessContentTypeFromStream(bis);
if (imageTypes.contains("/")) {
prefix = imageTypes.substring(imageTypes.lastIndexOf("/"));
prefix = prefix.replaceFirst("/", ".");
return prefix;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bis != null) {
bis.close();
}
if (urlconnection != null) {
urlconnection.disconnect();
}
} catch (IOException ignored) {
}
}
return ".jpg";
} else {
BufferedInputStream in;
try {
FileInputStream inputStream = new FileInputStream(imgUrl);
in = new BufferedInputStream(inputStream);//输入容器
byte[] bytePrefix = new byte[6];
in.read(bytePrefix);
in.close();
inputStream.close();
return getImageType(bytePrefix);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
public static String getImageType(byte[] hexPrefix) {
//以前六位为准即可
String hex = bytesToHex(hexPrefix);
if (hex.startsWith("FFD8FF")) return ".jpg";
if (hex.startsWith("89504E")) return ".png";
if (hex.startsWith("474946")) return ".gif";
if (hex.startsWith("49492A")) return ".tif";
if (hex.startsWith("424D")) return ".bmp";
if (hex.startsWith("414331")) return ".dwg";
else return "非记录在内的图像格式";
}
public static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte aByte : bytes) {
String hex = Integer.toHexString(aByte & 0xFF);
if (hex.length() < 2) {
sb.append(0);
}
sb.append(hex);
}
return sb.toString().toUpperCase();
}
是否gif png jpg自己判断一下即可