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

Java實現(xiàn)限制文件上傳類型功能

 更新時間:2025年07月03日 10:33:54   作者:思靜魚  
這篇文章主要為大家詳細介紹了在Java中如何實現(xiàn)限制文件上傳類型功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在 Java 的 Web 后端(如 Spring Boot)中,限制文件上傳類型通常通過判斷 MultipartFile 的 Content-Type(MIME 類型)或文件擴展名(后綴名)來實現(xiàn)。

一、限制文件類型的常見做法

方法 1:根據(jù)MultipartFile.getContentType()判斷 MIME 類型

public void validateFileType(MultipartFile file) {
    List<String> allowedTypes = List.of("image/png", "image/jpeg", "application/pdf");
    String contentType = file.getContentType();

    if (!allowedTypes.contains(contentType)) {
        throw new IllegalArgumentException("不支持的文件類型: " + contentType);
    }
}

注意:瀏覽器偽造 Content-Type 是可能的,因此推薦再結(jié)合后綴判斷或做文件頭檢查(Magic Number)

方法 2:根據(jù)文件名后綴判斷類型(不安全但能擋住大部分無意誤傳)

public void validateExtension(MultipartFile file) {
    String filename = file.getOriginalFilename().toLowerCase();
    List<String> allowedExtensions = List.of(".jpg", ".jpeg", ".png", ".pdf");

    if (allowedExtensions.stream().noneMatch(filename::endsWith)) {
        throw new IllegalArgumentException("不支持的文件后綴");
    }
}

方法 3:安全性更高 —— 檢查文件頭(Magic Number)

每種文件格式都有“魔數(shù)”(Magic Number),可使用第三方庫如 Apache Tika、JMimeMagicFileTypeDetector 來檢測。

使用 Apache Tika 示例:

import org.apache.tika.Tika;

public void validateByTika(MultipartFile file) throws IOException {
    Tika tika = new Tika();
    String detectedType = tika.detect(file.getInputStream());

    List<String> allowedTypes = List.of("image/jpeg", "image/png", "application/pdf");
    if (!allowedTypes.contains(detectedType)) {
        throw new IllegalArgumentException("文件類型不合法: " + detectedType);
    }
}

二、實戰(zhàn)應(yīng)用整合到上傳接口中(Spring Boot)

@PostMapping("/upload")
public ResponseEntity<?> upload(@RequestParam MultipartFile file) throws IOException {
    validateFileType(file);      // 判斷 MIME 類型
    validateExtension(file);     // 判斷文件名后綴
    validateByTika(file);        // 推薦:更準確安全

    // 保存邏輯略...
    return ResponseEntity.ok("上傳成功");
}

三、可配置化(支持配置文件控制允許類型)

application.yml

file:
  allowed-types:
    - image/png
    - image/jpeg
    - application/pdf

配置類注入

@ConfigurationProperties(prefix = "file")
@Data
public class FileConfig {
    private List<String> allowedTypes;
}

再注入 FileConfig 來校驗:

@Autowired
private FileConfig fileConfig;

if (!fileConfig.getAllowedTypes().contains(contentType)) {
    throw new IllegalArgumentException("不支持的文件類型");
}

四、其他建議

場景建議
前端限制文件選擇<input accept="image/*">
后端強校驗必不可少防止繞過前端
存儲前統(tǒng)一重命名處理防止惡意腳本如 xx.jpg.exe
加白名單優(yōu)于黑名單拒絕所有不認識的類型

到此這篇關(guān)于Java實現(xiàn)限制文件上傳類型功能的文章就介紹到這了,更多相關(guān)Java限制文件上傳類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis直接執(zhí)行SQL的工具SqlMapper

    MyBatis直接執(zhí)行SQL的工具SqlMapper

    今天小編就為大家分享一篇關(guān)于MyBatis直接執(zhí)行SQL的工具SqlMapper,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • SpringBoot整合MyBatis的代碼詳解

    SpringBoot整合MyBatis的代碼詳解

    這篇文章主要介紹了SpringBoot整合MyBatis筆記記錄,大家需要注意在整合mybatis之前我們需要相對應(yīng)的導(dǎo)入相關(guān)依賴,首先需要在java的目錄和resources下創(chuàng)建mapper文件夾,對SpringBoot整合MyBatis的詳細過程感興趣的朋友一起看看吧
    2022-05-05
  • Java自定義類數(shù)組報null的相關(guān)問題及解決

    Java自定義類數(shù)組報null的相關(guān)問題及解決

    這篇文章主要介紹了Java自定義類數(shù)組報null的相關(guān)問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Netty內(nèi)存池泄漏問題以解決方案

    Netty內(nèi)存池泄漏問題以解決方案

    這篇文章主要介紹了Netty內(nèi)存池泄漏問題以解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java線程安全和鎖Synchronized知識點詳解

    Java線程安全和鎖Synchronized知識點詳解

    在本篇文章里小編給大家分享的是關(guān)于Java線程安全和鎖Synchronized相關(guān)知識點,有需要的朋友們可以參考下。
    2019-08-08
  • Java代碼實現(xiàn)哈希表(google 公司的上機題)

    Java代碼實現(xiàn)哈希表(google 公司的上機題)

    這篇文章主要介紹了Java 哈希表詳解(google 公司的上機題),本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 關(guān)于springboot配置druid數(shù)據(jù)源不生效問題(踩坑記)

    關(guān)于springboot配置druid數(shù)據(jù)源不生效問題(踩坑記)

    今天日常跟著網(wǎng)課學(xué)習(xí),學(xué)到了整合druid數(shù)據(jù)源,遇到了好幾個坑,希望這篇文章可以幫助一些和我一樣踩坑的人
    2021-09-09
  • SpringBoot訪問windows共享文件的方法

    SpringBoot訪問windows共享文件的方法

    這篇文章主要介紹了SpringBoot訪問windows共享文件,項目使用minio存儲且不在同一臺服務(wù)器上,為了優(yōu)化速度決定使用windows共享功能進行文件傳輸,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Java設(shè)計模式之Iterator模式介紹

    Java設(shè)計模式之Iterator模式介紹

    所謂Iterator模式,即是Iterator為不同的容器提供一個統(tǒng)一的訪問方式。本文以java中的容器為例,模擬Iterator的原理。需要的朋友可以參考下
    2013-07-07
  • SpringBoot項目啟動時預(yù)加載操作方法

    SpringBoot項目啟動時預(yù)加載操作方法

    Spring Boot是一種流行的Java開發(fā)框架,它提供了許多方便的功能來簡化應(yīng)用程序的開發(fā)和部署,這篇文章主要介紹了SpringBoot項目啟動時預(yù)加載,需要的朋友可以參考下
    2023-09-09

最新評論

易门县| 定结县| 吴堡县| 谷城县| 玉田县| 应城市| 甘孜县| 西盟| 临安市| 甘泉县| 密云县| 肇东市| 大余县| 全州县| 西畴县| 旬邑县| 甘泉县| 黔西县| 温泉县| 沧源| 堆龙德庆县| 体育| 台南县| 白水县| 威远县| 洛阳市| 井冈山市| 阳西县| 仁布县| 永昌县| 延庆县| 巴青县| 德阳市| 建湖县| 伊吾县| 平远县| 米易县| 洪泽县| 榆中县| 衡山县| 宝坻区|