springboot(12)--上传文件

xiaoxiao2022-06-11  27

我们知道,前端上传文件时,最常见的就是利用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的解析。

下面给出示例:

 

StandardMultipartFile(默认)

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

 

CommonsMultipartFile

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=false

3.和前面一样编写控制层并测试。

转载请注明原文地址: https://www.6miu.com/read-4931751.html

最新回复(0)