我们知道,前端上传文件时,最常见的就是利用Form表单的方式进行文件的上传功能了,上传时设置enctype为multipart/form-data,或者直接利用jquery的一些上传插件实现。而后端,在jsp+Servlet时代,最常见的就是利用smartupload上传组件。而在SpringMvc时代,其提供了MultipartFile封装类,它包含了文件的二进制流和文件相关属性(文件名、大小等)。所以在SpringBoot中也是使用此封装类进行文件上传的。
上面说到,springmvc中是利用MultipartFile进行文件上传的。而MultipartFile是个接口类,它的实现类有CommonsMultipartFile和StandardMultipartFile。这里简单说明下:
StandardMultipartFile:是基于j2ee自带的文件上传进行解析,即使用Servlet3.0提供的javax.servlet.http.Part上传方式。
CommonsMultipartFile:是基于apache fileupload的解析。
下面给出示例:
0.引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>1.添加上传文件的模板和显示上传结果的模板
upload.html
<form action="/fileupload/doUpload" method="post" enctype="multipart/form-data"> <input type="file" name="file" value="点击上传"/><br> <input type="submit" value="提交"/> </form>uploadResult.html
<h2>上传成功!</h2>2.编写控制器
@Controller @RequestMapping("/fileupload/") public class FileUploadController { Logger logger=Logger.getLogger(FileUploadController.class); @GetMapping("/uploadPage") public String uploadPage(){ return "upload"; } @PostMapping("/doUpload") public String upload(@RequestParam MultipartFile file) throws IOException { file.transferTo(new File("E://imgs")); logger.info("上传文件:"+file.getName()+"\n"+"文件大小:"+file.getSize()); return "uploadResult"; } }3.测试
网页输入:http:127.0.0.1:8080/fileupload/uploadPage
0.引入依赖
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency>1.创建配置类
FileUploadConfig.java
@Configuration public class FileUploadConfig { @Bean public MultipartResolver custom() { return new CommonsMultipartResolver(); } }主要是为了创建文件解析器。
2.关闭servlet自带的自动配置类
.由于spring.http.multipart.enabled默认是true,所以加载类MultipartAutoConfiguration会自动加载,这样fileUpload就会异常了。
spring.http.multipart.enabled=false3.和前面一样编写控制层并测试。