SpringBoot中如何验证用户上传的图片资源
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下SpringBoot中如何验证用户上传的图片资源,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!允许用户上
千家信息网最后更新 2026年11月02日SpringBoot中如何验证用户上传的图片资源
小编给大家分享一下SpringBoot中如何验证用户上传的图片资源,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
允许用户上传图片资源(头像,发帖)是APP常见的需求,特别需要把用户的资源IO到磁盘情况下,需要防止坏人提交一些非法的文件,例如木马,webshell,可执行程序等等。这类非法文件不仅会导致客户端图片资源显示失败,而且还会给服务器带来安全问题。
通过文件后缀判断文件的合法性
这种方式比较常见,也很简单,是目前大多数APP选择的做法。
public Object upload (@RequestParam("file") MultipartFile multipartFile) throws IllegalStateException, IOException { // 原始文件名称 String fileName = multipartFile.getOriginalFilename(); // 解析到文件后缀,判断是否合法 int index = fileName.lastIndexOf("."); String suffix = null; if (index == -1 || (suffix = fileName.substring(index + 1)).isEmpty()) { return "文件后缀不能为空"; } // 允许上传的文件后缀列表 Set allowSuffix = new HashSet<>(Arrays.asList("jpg", "jpeg", "png", "gif")); if (!allowSuffix.contains(suffix.toLowerCase())) { return "非法的文件,不允许的文件类型:" + suffix; } // 序列化到磁盘中的文件上传目录, /upload // FileCopyUtils.copy 方法会自动关闭流资源 FileCopyUtils.copy(multipartFile.getInputStream(), Files.newOutputStream(Paths.get("D://upload", fileName), StandardOpenOption.CREATE_NEW)); // 返回相对访问路径,文件名极有可能带中文或者空格等字符,进行uri编码 return "/" + UriUtils.encode(fileName, StandardCharsets.UTF_8);} 使用 ImageIO 判断是否是图片
这个方法就比较严格了,在判断后缀的基础上,使用Java的ImageIO类去加载图片,尝试读取其宽高信息,如果不是合法的图片资源。则无法读取到这两个数据。就算是把非法文件修改了后缀,也可以检测出来。
public Object upload (@RequestParam("file") MultipartFile multipartFile) throws IllegalStateException, IOException { // 原始文件名称 String fileName = multipartFile.getOriginalFilename(); // 解析到文件后缀 int index = fileName.lastIndexOf("."); String suffix = null; if (index == -1 || (suffix = fileName.substring(index + 1)).isEmpty()) { return "文件后缀不能为空"; } // 允许上传的文件后缀列表 Set allowSuffix = new HashSet<>(Arrays.asList("jpg", "jpeg", "png", "gif")); if (!allowSuffix.contains(suffix.toLowerCase())) { return "非法的文件,不允许的文件类型:" + suffix; } // 临时文件 File tempFile = new File(System.getProperty("java.io.tmpdir"), fileName); try { // 先把文件序列化到临时目录 multipartFile.transferTo(tempFile); try { // 尝试IO文件,判断文件的合法性 BufferedImage bufferedImage = ImageIO.read(tempFile); bufferedImage.getWidth(); bufferedImage.getHeight(); } catch (Exception e) { // IO异常,不是合法的图片文件,返回异常信息 return "文件不是图片文件"; } // 复制到到上传目录 FileCopyUtils.copy(new FileInputStream(tempFile), Files.newOutputStream(Paths.get("D://upload", fileName), StandardOpenOption.CREATE_NEW)); // 返回相对访问路径 return "/" + UriUtils.encode(fileName, StandardCharsets.UTF_8); } finally { // 响应客户端后,始终删除临时文件 tempFile.delete(); }} 以上是"SpringBoot中如何验证用户上传的图片资源"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
文件
图片
后缀
资源
图片资源
合法
用户
目录
篇文章
验证
原始
信息
内容
合法性
名称
客户
客户端
常见
序列
方法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
瑰夏咖啡
互联网高科技
湖南永感互联网科技有限公司
云信互联网科技有限公司
美国互联网科技
凡科互联网科技
有木互联网科技
赫美联合互联网科技
互联网科技股午盘股票涨跌
青海省互联网新科技
港股科技和互联网
智腾互联网科技有限公司
链环科技传统企业怎么转型互联网
想开互联网科技公司怎么样
本届互联网博览会上的黑科技
西安小鹰速贷互联网科技有限公司
电子商务与互联网科技的关系
郑州欣桑互联网科技有限公司
湖北辰鑫科技互联网
恒生科技指数 中概互联网
互联网金融公司科技
期待互联网科技
深圳齐家互联网科技
米客互联网科技
赫美联合互联网科技
云创客互联网科技公司
华服互联网科技官网
数字互联网科技有限公司
伍佰万互联网科技是干嘛的
六子台科技互联网展会