最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)上傳文件類型檢測(cè)過(guò)程解析

 更新時(shí)間:2019年12月03日 15:04:02   作者:慕塵  
這篇文章主要介紹了java實(shí)現(xiàn)上傳文件類型檢測(cè)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了java實(shí)現(xiàn)上傳文件類型檢測(cè)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在進(jìn)行文件上傳時(shí),特別是向普通用戶開(kāi)放文件上傳功能時(shí),需要對(duì)上傳文件的格式進(jìn)行控制,以防止黑客將病毒腳本上傳。單純的將文件名的類型進(jìn)行截取的方式非常容易遭到破解,上傳者只需要將病毒改換文件名便可以完成上傳。

可以讀取文件的十六進(jìn)制的文件頭,來(lái)判斷文件真正的格式。

讀取文件的二進(jìn)制數(shù)據(jù)并將其轉(zhuǎn)換為十六進(jìn)制時(shí),同類型文件的文件頭數(shù)據(jù)是相同的,即使改變了其后綴,這個(gè)數(shù)據(jù)也不會(huì)改變

import java.io.*;
import java.util.HashMap;

public class GetFileType {

    // 緩存文件頭信息-文件頭信息
    public static final HashMap<String, String> mFileTypes = new HashMap<String, String>();
    static {
      mFileTypes.put("FFD8FFE0","jpg");
      mFileTypes.put("89504E47","png");
      mFileTypes.put("424DC6CC","bmp");
      mFileTypes.put("47494638","gif");
    }
    /**
   * 根據(jù)文件路徑獲取文件頭信息
   *
   * @param filePath 文件路徑
   * @return 文件頭信息
   */
  public static String getFileType(String filePath) {
    String type = getFileHeader(filePath);
    System.out.println(type);
    return mFileTypes.get(type);
  }

  /**
   * 根據(jù)文件路徑獲取文件頭信息
   *
   * @param filePath 文件路徑
   * @return 文件頭信息
   */
  public static String getFileHeader(String filePath) {
    FileInputStream is = null;
    String value = null;
    try {
      is = new FileInputStream(filePath);
      byte[] b = new byte[4];
      /*
       * int read() 從此輸入流中讀取一個(gè)數(shù)據(jù)字節(jié)。 int read(byte[] b) 從此輸入流中將最多 b.length
       * 個(gè)字節(jié)的數(shù)據(jù)讀入一個(gè) byte 數(shù)組中。 int read(byte[] b, int off, int len)
       * 從此輸入流中將最多 len 個(gè)字節(jié)的數(shù)據(jù)讀入一個(gè) byte 數(shù)組中。
       */
      is.read(b, 0, b.length);
      value = bytesToHexString(b);
    } catch (Exception e) {
    } finally {
      if (null != is) {
        try {
          is.close();
        } catch (IOException e) {
        }
      }
    }
    return value;
  }

  /**
   * 將要讀取文件頭信息的文件的byte數(shù)組轉(zhuǎn)換成string類型表示
   *
   * @param src 要讀取文件頭信息的文件的byte數(shù)組
   * @return 文件頭信息
   */
  private static String bytesToHexString(byte[] src) {
    StringBuilder builder = new StringBuilder();
    if (src == null || src.length <= 0) {
      return null;
    }
    String hv;
    for (int i = 0; i < src.length; i++) {
      // 以十六進(jìn)制(基數(shù) 16)無(wú)符號(hào)整數(shù)形式返回一個(gè)整數(shù)參數(shù)的字符串表示形式,并轉(zhuǎn)換為大寫
      hv = Integer.toHexString(src[i] & 0xFF).toUpperCase();
      if (hv.length() < 2) {
        builder.append(0);
      }
      builder.append(hv);
    }
    return builder.toString();
  }

  public static void main(String[] args) {
    String path = "E:/file/2.png";
    String type = getFileType(path);
    System.out.println(type);
    path = "E:/file/timg.jpg";
    type = getFileType(path);
    System.out.println(type);
    path = "E:/file/bmp.bmp";
    type = getFileType(path);
    System.out.println(type);
    path = "E:/file/winter.gif";
    type = getFileType(path);
    System.out.println(type);
  }

}

運(yùn)行輸出

89504E47
png
FFD8FFE0
jpg
424DC6CC
bmp
47494638
gif

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java解決青蛙跳臺(tái)階問(wèn)題流程

    Java解決青蛙跳臺(tái)階問(wèn)題流程

    所謂的青蛙跳臺(tái)階問(wèn)題,就是指一只青蛙一次可以跳上1級(jí)臺(tái)階,也可以跳上2級(jí)。求該青蛙跳上一個(gè)n級(jí)的臺(tái)階總共有多少種跳法。本文將用Java解決這一問(wèn)題,需要的可以參考一下
    2022-03-03
  • Java中使用數(shù)組實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實(shí)例

    Java中使用數(shù)組實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實(shí)例

    這篇文章主要介紹了Java中使用數(shù)組實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實(shí)例,本文先是講解了實(shí)現(xiàn)棧至少應(yīng)該包括以下幾個(gè)方法等知識(shí),然后給出代碼實(shí)例,需要的朋友可以參考下
    2015-01-01
  • JavaScript實(shí)現(xiàn)鼠標(biāo)移動(dòng)粒子跟隨效果

    JavaScript實(shí)現(xiàn)鼠標(biāo)移動(dòng)粒子跟隨效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)鼠標(biāo)移動(dòng)粒子跟隨效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java之關(guān)于基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的存放位置

    Java之關(guān)于基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的存放位置

    這篇文章主要介紹了Java之關(guān)于基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的存放位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java使用百度AI接口實(shí)現(xiàn)智能機(jī)器人對(duì)話系統(tǒng)

    Java使用百度AI接口實(shí)現(xiàn)智能機(jī)器人對(duì)話系統(tǒng)

    AI已經(jīng)在各行各業(yè)中廣泛應(yīng)用,助力于各式各樣的業(yè)務(wù),而在機(jī)器人對(duì)話中,我們可以通過(guò)利用百度AI中的自然語(yǔ)言處理、問(wèn)答知識(shí)圖譜等技術(shù),使機(jī)器人可以更加智能化、自然化的為用戶服務(wù),本文介紹Java利用百度AI接口實(shí)現(xiàn)智能機(jī)器人對(duì)話系統(tǒng)
    2024-01-01
  • centos下安裝openjdk21的詳細(xì)圖文教程

    centos下安裝openjdk21的詳細(xì)圖文教程

    這篇文章主要介紹了centos下安裝openjdk21的相關(guān)資料,文章詳細(xì)介紹了如何手動(dòng)下載、解壓和配置OpenJDK?21,包括下載OpenJDK、上傳到指定目錄、解壓、編輯環(huán)境變量和驗(yàn)證安裝成功的過(guò)程,需要的朋友可以參考下
    2024-12-12
  • spring boot 自定義starter的實(shí)現(xiàn)教程

    spring boot 自定義starter的實(shí)現(xiàn)教程

    下面小編就為大家分享一篇spring boot 自定義starter的實(shí)現(xiàn)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 使用JWT創(chuàng)建解析令牌及RSA非對(duì)稱加密詳解

    使用JWT創(chuàng)建解析令牌及RSA非對(duì)稱加密詳解

    這篇文章主要介紹了JWT創(chuàng)建解析令牌及RSA非對(duì)稱加密詳解,JWT是JSON Web Token的縮寫,即JSON Web令牌,是一種自包含令牌,一種情況是webapi,類似之前的阿里云播放憑證的功能,另一種情況是多web服務(wù)器下實(shí)現(xiàn)無(wú)狀態(tài)分布式身份驗(yàn)證,需要的朋友可以參考下
    2023-11-11
  • SpringBoot常見(jiàn)問(wèn)題小結(jié)

    SpringBoot常見(jiàn)問(wèn)題小結(jié)

    這篇文章主要介紹了SpringBoot常見(jiàn)問(wèn)題小結(jié),需要的朋友可以參考下
    2017-07-07
  • spring?data?jpa查詢一個(gè)實(shí)體類的部分屬性方式

    spring?data?jpa查詢一個(gè)實(shí)體類的部分屬性方式

    這篇文章主要介紹了spring?data?jpa查詢一個(gè)實(shí)體類的部分屬性方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論

蒙城县| 武胜县| 封丘县| 剑河县| 平潭县| 略阳县| 奉化市| 清镇市| 碌曲县| 信阳市| 象州县| 大理市| 鲜城| 呼图壁县| 新宁县| 密山市| 青川县| 红河县| 红安县| 平原县| 丰原市| 土默特左旗| 平阳县| 嘉善县| 肥乡县| 中超| 普宁市| 北碚区| 泾阳县| 洪湖市| 大兴区| 双城市| 榆中县| 奉化市| 滨海县| 南雄市| 行唐县| 大厂| 来凤县| 安国市| 城口县|