文件上传的操作是我们JavaWeb开发中经常会用到的操作,同时既然是文件,那么还需要控制文件的大小等操作,以前怎么实现的相信大家都已经非常清楚了,接下来使用SpringBoot实现文件上传并控制文件大小的基本操作。
配置文件方式控制文件上传的大小
- 准备文件上传页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form action="fileUploadController1" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="filename"><br/> <input type="submit" value="请上传"> </form> </body> </html>
- 编写Controller
package com.neuedu.controller; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; /** * SpringBoot文件上传 * * 修改上传文件的大小限制方式一 * * @author 清水三千尺 * */ //@Controller @RestController //表示该类下的方法的返回值会自动做json格式的转换 public class FileUploadController1 { /* * 处理文件上传的方法 */ @RequestMapping("/fileUploadController1") public Map<String,Object> fileUpload(MultipartFile filename) throws IllegalStateException, IOException{ //打印显示文件名称 System.out.println(filename.getOriginalFilename()); //将图片绑定到指定位置 filename.transferTo(new File("d:/"+filename.getOriginalFilename())); //返回json字符串 Map<String,Object> map = new HashMap<String, Object>(); map.put("msg", "OK...."); return map; } }
- 编写配置文件(application.yml)
server: port: 8080 spring: thymeleaf: cache: false servlet: multipart: max-file-size: 500MB max-request-size: 1000MB
- 编写启动类
package com.neuedu; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * SpringBoot 启动类 * @author 清水三千尺 * */ @SpringBootApplication public class App { public static void main(String[] args) throws Exception { SpringApplication.run(App.class, args); } }
测试
编写方法的方式控制文件上传的大小
- 准备文件上传页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form action="fileUploadController2" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="filename"><br/> <input type="submit" value="请上传"> </form> </body> </html>
- 编写Controller
package com.neuedu.controller; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.MultipartConfigElement; import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.util.unit.DataSize; import org.springframework.util.unit.DataUnit; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; /** * SpringBoot文件上传 * * @author 清水三千尺 * */ //@Controller @RestController //表示该类下的方法的返回值会自动做json格式的转换 public class FileUploadController2 { /* * 处理文件上传的方法 * * 修改上传文件的大小的方式二 */ @RequestMapping("/fileUploadController2") public Map<String,Object> fileUpload(MultipartFile filename) throws IllegalStateException, IOException{ //打印显示文件名称 System.out.println(filename.getOriginalFilename()); //将图片绑定到指定位置 filename.transferTo(new File("d:/"+filename.getOriginalFilename())); //返回json字符串 Map<String,Object> map = new HashMap<String, Object>(); map.put("msg", "OK...."); return map; } /** * 文件上传配置 * @return */ @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); //文件最大1000M,DataUnit提供5中类型B,KB,MB,GB,TB factory.setMaxFileSize(DataSize.of(1000, DataUnit.MEGABYTES)); // 设置总上传数据总大小1000M factory.setMaxRequestSize(DataSize.of(1000, DataUnit.MEGABYTES)); return factory.createMultipartConfig(); } }
- 编写启动类
package com.neuedu; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * SpringBoot 启动类 * @author 清水三千尺 * */ @SpringBootApplication public class App { public static void main(String[] args) throws Exception { SpringApplication.run(App.class, args); } }
测试