流程分析:SpringMVC框架上传文件的原理分析
第一步:在springmvc的配置文件中,注入文件解析器对象
<!--配置文件解析器,id必须叫multipartResolver,这是固定的写法-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--最大文件传10M-->
<property name="maxUploadSize" value="10485760"></property>
</bean>
第二步:导入文件上传所需jar包坐标
<!--文件上传所需要的jar包(commons-fileupload、commons-io)-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
第三步:定义方法,使用MultipartFile对象对文件进行上传
注意:MultipartFile对象在方法中注入时,变量名必须和上传文件input的name名一致
package cn.gpxxg.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Controller
@RequestMapping("/upload")
public class UploadController {
/**
* springmvc文件上传
* @param request
* @param upload
* @return
* @throws Exception
*/
@RequestMapping("/uploadFile")
public String uploadFile(HttpServletRequest request, MultipartFile upload) throws Exception {
System.out.println("文件开始上传");
// 定义文件上传位置
String uploadPath = request.getSession().getServletContext().getRealPath("/uploads/");
// 判断该路径是否存在
File file = new File(uploadPath);
if (!file.exists())
{
// 如果不存在,则创建文件夹
file.mkdir();
}
// 获取上传文件的原始文件名称
String filename = upload.getOriginalFilename();
// 设置文件上传后的文件名
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + "_" + filename;
System.out.println(file + filename);
upload.transferTo(new File(file, filename));
return "success";
}
}
总结:
1、首先大家先看下第一张流程图,知道springMVC是如何处理的
2、在springmvc的配置文件中,注入文件解析器对象CommonsMultipartResolver时,id必须叫multipartResolver
3、MultipartFile对象在方法中注入时,变量名必须和上传文件input的name名一致