亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java 讀取圖片的mimeType的方法

2024-07-13 10:17:09
字體:
來源:轉載
供稿:網友

一、問題描述

在項目開發的時候,我們經常會遇到一類文件上傳的問題,就是獲取圖片是哪種格式。很多情況下,很多人都是用后綴名去判斷,如下所示。

if(filename.endsWith(".png") || filename.endsWith(".jpg")){  //保存圖片}else{  throw new IOException("Error file format !");}

但是這種方式相當不可靠,我們可以嘗試將zip文件、rmvb文件、css、js修改后綴名位jpg或者png上傳,也可以上傳到服務器,這就造成我們服務器上出現了臟數據。此外,對于有些圖片文件,修改成錯誤的擴展名,有些瀏覽器可能無法顯示出此圖片。

二、解決方案

在計算機系統中,媒體類型的文件都有【標識符】,zip、圖片本身屬于媒體文件,因此我們可以通過編解碼的方式判斷圖片是否合法。

1、判斷標示方法

private static boolean isBMP(byte[] buf){ byte[] markBuf = "BM".getBytes(); //BMP圖片文件的前兩個字節 return compare(buf, markBuf); }  private static boolean isICON(byte[] buf) { byte[] markBuf = {0, 0, 1, 0, 1, 0, 32, 32}; return compare(buf, markBuf); } private static boolean isWEBP(byte[] buf) { byte[] markBuf = "RIFF".getBytes(); //WebP圖片識別符 return compare(buf, markBuf); } private static boolean isGIF(byte[] buf) {  byte[] markBuf = "GIF89a".getBytes(); //GIF識別符 if(compare(buf, markBuf)) {  return true; } markBuf = "GIF87a".getBytes(); //GIF識別符 if(compare(buf, markBuf)) {  return true; } return false; } private static boolean isPNG(byte[] buf) {  byte[] markBuf = {(byte) 0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A}; //PNG識別符  // new String(buf).indexOf("PNG")>0 //也可以使用這種方式 return compare(buf, markBuf); } private static boolean isJPEGHeader(byte[] buf) { byte[] markBuf = {(byte) 0xff, (byte) 0xd8}; //JPEG開始符  return compare(buf, markBuf); }  private static boolean isJPEGFooter(byte[] buf)//JPEG結束符 { byte[] markBuf = {(byte) 0xff, (byte) 0xd9};  return compare(buf, markBuf); }

2、核心方法

/** * 獲取文件的mimeType * @param filename * @return */ private static String getMimeType(String filename){ try {  String mimeType = readType(filename);  return String.format("image/%s", mimeType); } catch (IOException e) {  e.printStackTrace(); } return null; } /** * 讀取文件類型 * @param filename * @return * @throws IOException */ private static String readType(String filename) throws IOException {  FileInputStream fis = null; try {  File f = new File(filename);  if(!f.exists() || f.isDirectory() || f.length()<8) {  throw new IOException("the file ["+f.getAbsolutePath()+"] is not image !");  }    fis= new FileInputStream(f);  byte[] bufHeaders = readInputStreamAt(fis,0,8);  if(isJPEGHeader(bufHeaders))  {   long skiplength = f.length()-2-8; //第一次讀取時已經讀了8個byte,因此需要減掉  byte[] bufFooters = readInputStreamAt(fis, skiplength, 2);  if(isJPEGFooter(bufFooters))  {   return "jpeg";  }  }  if(isPNG(bufHeaders))  {  return "png";  }  if(isGIF(bufHeaders)){    return "gif";  }  if(isWEBP(bufHeaders))  {  return "webp";  }  if(isBMP(bufHeaders))  {  return "bmp";  }  if(isICON(bufHeaders))  {  return "ico";  }  throw new IOException("the image's format is unkown!");   } catch (FileNotFoundException e) {  throw e; }finally{  try {  if(fis!=null) fis.close();  } catch (Exception e) {  } }  }  /** * 標示一致性比較 * @param buf 待檢測標示 * @param markBuf 標識符字節數組 * @return 返回false標示標示不匹配 */ private static boolean compare(byte[] buf, byte[] markBuf) { for (int i = 0; i < markBuf.length; i++) {  byte b = markBuf[i];  byte a = buf[i];    if(a!=b){  return false;  } } return true; } /** *  * @param fis 輸入流對象 * @param skiplength 跳過位置長度 * @param length 要讀取的長度 * @return 字節數組 * @throws IOException */ private static byte[] readInputStreamAt(FileInputStream fis, long skiplength, int length) throws IOException { byte[] buf = new byte[length]; fis.skip(skiplength); // int read = fis.read(buf,0,length); return buf; }

3、測試代碼

正常測試

public class ImageType { public static void main(String[] args) {   String filename = "oschina.jpg";  String type = getMimeType(filename);  System.out.println(type); }}

輸出

image/jpeg

修改擴展名測試

①修改oschina.jpeg為oschina.png

②復制oschina.png刪除擴展名

public class ImageType { public static void main(String[] args) {   String filename = "oschina.png";  String type = getMimeType(filename);  System.out.println(type);   filename = "oschina";  type = getMimeType(filename);  System.out.println(type);       }}

輸出

image/jpeg
image/jpeg

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久久新婚| 日韩久久免费电影| 色婷婷综合成人| 亚洲欧美999| 国产香蕉97碰碰久久人人| 国产一区二区三区在线| 97免费视频在线播放| 在线视频免费一区二区| 日本免费一区二区三区视频观看| 精品美女久久久久久免费| 亚洲欧美精品在线| 欧美猛少妇色xxxxx| 亚洲在线免费看| 欧美一级bbbbb性bbbb喷潮片| 精品国产一区二区三区久久久狼| 欧美一级片免费在线| 91国产精品视频在线| 午夜精品一区二区三区av| 久久精品91久久香蕉加勒比| xvideos亚洲| 一区二区欧美在线| 庆余年2免费日韩剧观看大牛| 97精品国产97久久久久久免费| 欧美中在线观看| 国产主播精品在线| 一区二区三区视频观看| 亚洲欧洲高清在线| 日本中文字幕久久看| 中文字幕日韩有码| 欧美日韩在线视频观看| 国产欧美欧洲在线观看| 成人福利视频在线观看| 亚洲人成五月天| 久久久久亚洲精品成人网小说| 欧美小视频在线| 亚洲欧美综合图区| 亚洲久久久久久久久久久| 91精品国产综合久久香蕉最新版| 国产一区玩具在线观看| 国产精品免费一区| 国产精品国产亚洲伊人久久| 久久国产精品久久久久久| 岛国av一区二区在线在线观看| 欧美怡春院一区二区三区| xxxxx91麻豆| 欲色天天网综合久久| 成人黄色av免费在线观看| 国产成人精品优优av| 亚洲天堂男人天堂| 国产精品中文在线| 亚洲国产精品久久| 久久久电影免费观看完整版| 国产噜噜噜噜噜久久久久久久久| 国产日韩欧美综合| 欧美精品一本久久男人的天堂| 国产亚洲精品高潮| 国产精品扒开腿做爽爽爽男男| www亚洲精品| 亚洲男人的天堂在线| 国产精品羞羞答答| 亚洲精品wwwww| 亚洲国产精品推荐| 色综合久久久久久中文网| 日本高清久久天堂| 国产精品视频网址| 欧美成人精品h版在线观看| 色偷偷av一区二区三区乱| 狠狠色狠狠色综合日日五| 国产精品久久久久久久久久尿| 国内精品久久久久久中文字幕| 亚洲欧美日韩综合| 久久精品久久久久电影| 日本精品免费一区二区三区| 97久久精品人人澡人人爽缅北| 亚洲自拍中文字幕| 色系列之999| 97精品国产97久久久久久免费| 在线国产精品播放| 国内精品美女av在线播放| 欧美国产日产韩国视频| 中文字幕精品视频| 国产精品美女免费看| 中文字幕视频在线免费欧美日韩综合在线看| 成人综合网网址| 日韩av电影在线网| 久久人人爽人人爽人人片av高清| 国产精品一区电影| 人人澡人人澡人人看欧美| 国产v综合v亚洲欧美久久| 最近更新的2019中文字幕| 在线看日韩欧美| 欧美在线播放视频| 亚洲欧美日韩一区二区三区在线| 黄网站色欧美视频| 欧美高清videos高潮hd| 色无极影院亚洲| 情事1991在线| 国产精品日韩久久久久| 成人精品aaaa网站| 国产精品三级美女白浆呻吟| 国产亚洲福利一区| 亚洲精品v天堂中文字幕| 欧美黑人一区二区三区| 黑人欧美xxxx| 成人午夜黄色影院| 色爱精品视频一区| 亚州成人av在线| 久久成人精品视频| 日韩经典第一页| 亚洲精品97久久| 欧美午夜片欧美片在线观看| 国产精品免费一区| 亚洲国产高清高潮精品美女| 国产精品高潮呻吟久久av黑人| 欧美日韩国产一中文字不卡| 色狠狠久久aa北条麻妃| 欧美午夜精品久久久久久久| 亚洲综合大片69999| 91精品国产综合久久男男| 亚洲欧美日韩一区在线| 精品国产乱码久久久久久婷婷| 日产精品99久久久久久| 亚洲视频在线看| 亚洲女人被黑人巨大进入al| 91免费版网站入口| 92裸体在线视频网站| 欧美大尺度电影在线观看| 91精品国产免费久久久久久| 国产精品日韩电影| 97成人在线视频| 国产精品久久久久久av福利软件| 亚洲精品99999| 亚洲资源在线看| 亚洲在线视频观看| 亚洲视频一区二区三区| 中国人与牲禽动交精品| 91久久久久久久久久久久久| 欧美大片免费观看在线观看网站推荐| 亚洲一区二区国产| 91亚洲精品久久久| 国产成人精品免费久久久久| 久久中文字幕一区| 精品一区精品二区| 91免费综合在线| 久久久久久久av| 国产成人精品视频在线观看| 成人在线一区二区| 精品中文字幕乱| 欧美激情久久久久久| 欧美成人精品一区| 精品视频偷偷看在线观看| 久国内精品在线| 日韩美女视频免费看| 伊人久久久久久久久久久久久| 亚洲男人天堂网| 国产精品成人一区二区三区吃奶| 在线观看视频亚洲| 久久精品欧美视频| 日韩av不卡电影| 中文字幕日韩电影| 亚洲国产免费av| 热久久免费视频精品| 91沈先生在线观看| 国产欧美久久一区二区|