- springboot没有自己的文件上传技术,是依赖于springMVC的文件对象MultipartFile接收文件,必须将表单method设置为post,并将enctype设置为 multipart/form-data。只有这样,浏览器才会把用户所选文件的二进制数据发送给服务器
- MultipartFile对象有以下方法:
方法 |
说明 |
getBytes() |
以字节数组的形式返回文件内容 |
getContentType() |
返回文件的内容类型 |
getInputStream() |
返回一个InputStream来读取文件的内容 |
getName() |
返回多部分形式的参数名称 |
getOriginalFilename() |
返回客户端文件系统中的原始文件名。 |
getResource() |
返回此MultipartFile的Resource表示。 |
getSize() |
以字节为单位返回文件的大小。 |
isEmpty() |
返回上传的文件是否为空,即在多部分形式中没有选择任何文件,或者选择的文件没有内容。 |
transferTo() |
将接收到的文件传输到给定的目标文件。 |
transferTo() |
将接收到的文件传输到给定的目标文件。 |
- Spring Boot限制了最大的文件上传大小(默认1MB)和请求的大小(默认10MB),可以在全局配置application.perporties文件中修改文件的上传大小限制
# 上传文件总的最大值
spring.servlet.multipart.max-request-size=10MB
# 单个文件的最大值
spring.servlet.multipart.max-file-size=10MB
示例
@Controller public class FileUploadController {
/** * 文件上传类 * 文件会自动绑定到MultipartFile中 * @param request 获取请求信息 * @param description 文件描述 * @param file 上传的文件 * @return 上传成功或失败结果 * @throws IOException * @throws IllegalStateException */ @PostMapping("/upload") public String upload(HttpServletRequest request, @RequestParam("description") String description, @RequestParam("file") MultipartFile file) throws IllegalStateException, IOException {
// 获取文件描述参数 description,纯粹测试使用 System.out.println("description = " + description);
// 测试MultipartFile接口的各个方法 System.out.println("文件类型ContentType=" + file.getContentType()); System.out.println("文件组件名称Name=" + file.getName()); System.out.println("文件原名称OriginalFileName=" + file.getOriginalFilename()); System.out.println("文件大小Size=" + file.getSize()/1024 + "KB");
// 如果文件不为空,写入上传路径,进行文件上传 if (!file.isEmpty()) {
// 构建上传文件的存放路径 String path = request.getServletContext().getRealPath("/upload/"); System.out.println("path = " + path);
// 获取上传的文件名称,并结合存放路径,构建新的文件名称 String filename = file.getOriginalFilename(); File filepath = new File(path, filename);
// 判断路径是否存在,不存在则新创建一个 if (!filepath.getParentFile().exists()) { filepath.getParentFile().mkdirs(); }
// 将上传文件保存到目标文件目录 file.transferTo(new File(path + File.separator + filename)); return "success"; } else { return "error"; } } } |