springboot上传文件
上传文件
上传文件大家首先想到的就是 Apache Commons FileUpload,这个库使用非常广泛。Spring Boot3 版本中已经不能使用了。代替他的是 Spring Boot 中自己的文件上传实现。Spring Boot 上传文件现在变得非常简单。提供了封装好的处理上传文件的接口 MultipartResolver,用于解析上传文件的请求,他的内部实现类 StandardServletMultipartResolver。之前常用的 CommonsMultipartResolver 不可用了。CommonsMultipartResolver 是使用 Apache Commons FileUpload 库时的处理类。StandardServletMultipartResolver 内部封装了读取 POST 其中体的请求数据,也就是文件内容。我们现在只需要在 Controller 的方法加入形参@RequestParam MultipartFile。 MultipartFile 表示上传的文件,提供了方便的方法
保存文件到磁盘
- 创建项目、依赖关系
- 设置前端页面
- 均为静态资源,直接在 static 目录建立
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上传文件</title>
</head>
<body>
<h1>上传文件</h1>
<!--<form> 标签作用:定义一个表单,表单是HTML中用于收集用户输入的元素集合,可以包含各种输入框、按钮等控件。oadFile路径对应的处理程序。enctype="multipart/form-data":设置表单数据的编码类型。对于文件上传的表单,必须使用multipart/form-data,这是因为文件数据比较复杂,需要以这种方式来正确地将文件内容和其他表单数据一起发送到服务器。它会将表单数据编码为多部分格式,每一部分包含一个表单字段的数据,这样可以确保文件数据能够完整、正确地传输。method="post":指定表单提交时使用的HTTP请求方法。post方法用于向服务器发送数据,适合处理文件上传等操作,因为它可以发送大量的数据,并且数据不会像get方法那样显示在URL中。用途这个表单的主要用途是让用户能够上传文件到服务器。用户可以在表单中选择文件,然后点击提交按钮(虽然代码中没有显示按钮,但通常会有一个<input type="file">用于选择文件和一个<input type="submit">用于提交表单),文件就会被发送到服务器的uploadFile路径对应的处理程序进行处理,比如保存文件到服务器的某个目录等。-->
<form action="uploadFile" enctype="multipart/form-data" method="post"><input type="file" name="upFile"><br><input type="submit" value="上传"></form>
</body>
</html>
上传成功的显示页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
上传成功
</body>
</html>
后端
package com.example.uploadfile1.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/*** @Author: yanyu666_508200729@qq.com* @Date: 2025/5/26* @description:*/
// 重定向到制图,使用 Conroller@Controller
public class UploadFile1 {@PostMapping("uploadFile")public String uploadFile(@RequestParam("upFile") MultipartFile multipartFile){System.out.println("开始上传文件。。。");Map map = new HashMap();if(!multipartFile.isEmpty()){map.put("上传文件参数名称",multipartFile.getName());map.put("内容类型",multipartFile.getContentType());var ext = "unknown";
// 文件原始名字 .pngvar fileName = multipartFile.getOriginalFilename();
// . 的索引大于 0 说明 .png . 的前面一定有字符if(fileName.indexOf(".") > 0){
// 截取 . 后面的内容,也就是我们的后缀ext = fileName.substring(fileName.indexOf(".") + 1);// . 后面开始截取}
// 使用服务器生产的,具有唯一性的 文件名字 与 . 后缀 拼接var newFileName = UUID.randomUUID().toString() + "." +ext;
// 保存文件到指定的位置var path = "D://upload//" + newFileName;try {multipartFile.transferTo(new File(path));map.put("文件名字",newFileName);} catch (IOException e) {throw new RuntimeException(e);}
// 输出信息到控制台
// 重定向System.out.println("信息" + map);}return "redirect:/uploadInfo.html";// 重定向到网页视图,避免重复刷新}
}
测试
spring.application.name=uploadFile1
#单个文件最大大小
spring.servlet.multipart.max-file-size=5MB
#单次请求最大大小
spring.servlet.multipart.max-request-size=10MB
# 超出 多少后,直接走磁盘,不走内存
spring.servlet.multipart.file-size-threshold=0KB