欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2025年07月03日 10:33:54   作者:思靜魚  
這篇文章主要為大家詳細(xì)介紹了在Java中如何實現(xiàn)限制文件上傳類型功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(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);        // 推薦:更準(zhǔn)確安全

    // 保存邏輯略...
    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)于黑名單拒絕所有不認(rèn)識的類型

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

相關(guān)文章

  • 使用@Cacheable緩存解決雙冒號::的問題

    使用@Cacheable緩存解決雙冒號::的問題

    這篇文章主要介紹了使用@Cacheable緩存解決雙冒號::的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 解決 java: 程序包com.baomidou.mybatisplus.annotation不存在

    解決 java: 程序包com.baomidou.mybatisplus.annotation不存在

    在使用Java編寫程序時,經(jīng)常會遇到各種編譯錯誤或運行時異常,本文主要介紹了解決java:程序包com.baomidou.mybatisplus.annotation不存在,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 如何將maven項目劃分為多個模塊

    如何將maven項目劃分為多個模塊

    這篇文章主要介紹了如何將maven項目劃分為多個模塊,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • java實現(xiàn)聯(lián)機五子棋

    java實現(xiàn)聯(lián)機五子棋

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)聯(lián)機五子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java Web項目中實現(xiàn)文件下載功能的實例教程

    Java Web項目中實現(xiàn)文件下載功能的實例教程

    這篇文章主要介紹了Java Web項目中實現(xiàn)文件下載功能的實例教程,分別講解了通過超鏈接實現(xiàn)下載以及通過Servlet程序?qū)崿F(xiàn)下載的方式,需要的朋友可以參考下
    2016-05-05
  • JAVA 根據(jù)Url把多文件打包成ZIP下載實例

    JAVA 根據(jù)Url把多文件打包成ZIP下載實例

    這篇文章主要介紹了JAVA 根據(jù)Url把多文件打包成ZIP下載的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • SpringBoot如何通過配置禁用swagger

    SpringBoot如何通過配置禁用swagger

    這篇文章主要給大家介紹了關(guān)于SpringBoot如何通過配置禁用swagger的相關(guān)資料,Swagger用來在開發(fā)階段方便前后端分離的項目實戰(zhàn)中,提高前后端人員的工作效率,降低交流成本,但是版本上線之后要是把Swagger帶上去會存在很大的風(fēng)險,需要的朋友可以參考下
    2023-08-08
  • SpringBoot+Netty+WebSocket實現(xiàn)消息發(fā)送的示例代碼

    SpringBoot+Netty+WebSocket實現(xiàn)消息發(fā)送的示例代碼

    這篇文章主要介紹了SpringBoot+Netty+WebSocket實現(xiàn)消息發(fā)送的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java?Object轉(zhuǎn)Integer實現(xiàn)方式

    java?Object轉(zhuǎn)Integer實現(xiàn)方式

    這篇文章主要介紹了java?Object轉(zhuǎn)Integer實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringMVC Json自定義序列化和反序列化的操作方法

    SpringMVC Json自定義序列化和反序列化的操作方法

    這篇文章主要介紹了SpringMVC Json自定義序列化和反序列化的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論