当前位置: 代码网 > it编程>编程语言>Java > Java实现限制文件上传类型功能

Java实现限制文件上传类型功能

2025年07月03日 Java 我要评论
在 java 的 web 后端(如 spring boot)中,限制文件上传类型通常通过判断 multipartfile 的 content-type(mime 类型)或文件扩展名(后缀名)来实现。一

在 java 的 web 后端(如 spring boot)中,限制文件上传类型通常通过判断 multipartfile 的 content-type(mime 类型)或文件扩展名(后缀名)来实现。

一、限制文件类型的常见做法

方法 1:根据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 是可能的,因此推荐再结合后缀判断或做文件头检查(magic number)

方法 2:根据文件名后缀判断类型(不安全但能挡住大部分无意误传)

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)

每种文件格式都有“魔数”(magic number),可使用第三方库如 apache tikajmimemagicfiletypedetector 来检测。

使用 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);
    }
}

二、实战应用整合到上传接口中(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/*">
后端强校验必不可少防止绕过前端
存储前统一重命名处理防止恶意脚本如 xx.jpg.exe
加白名单优于黑名单拒绝所有不认识的类型

到此这篇关于java实现限制文件上传类型功能的文章就介绍到这了,更多相关java限制文件上传类型内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com