SpringMVC-文件上传
SpringMVC-文件上传
1.文件上传
1.1 文件上传必须
a. form表单的enctype取值必须是:multipart/form-data(默认值是:application/x-www-form-urlencoded)
b. method属性取值必须是post
c. 提供一个文件选择域。
1.2 文件上传的原理分析
当form表单的enctype取值不是默认值后,request.getParameter()将失效
enctype=”aaplication/x-www-form-urlencoded”时,form表单的正文内容是:
key=value&key=value&key=value
enctype=”multipart/form-data”时,请求正文的内容就变成:
每一部分都是MIME类型的描述正文
——————————————-7de1a433602ac 分界符
Content-Disposition: form-data; name=”userName” 协议头
…
1.3 依赖jar包
2. 传统方式实现文件上传
传统方式的文件上传,指的是我们上传的文件和访问的应用存在于同一台服务器上。
2.1 pom.xml文件依赖
<!--文件上传依赖的两个jar包-->
<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>
2.2 jsp页面
<form action="/user/fileupload01" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload"><br>
<input type="submit" value="上传">
</form>
2.3 编写控制器
@Controller
@RequestMapping("/user")
public class FileUploadController {
/**
* 使用原始方式上传文件
* @return
*/
@RequestMapping("/fileupload01")
public String testFileUpload(HttpServletRequest request) throws Exception {
//使用fileupload组件完成上传文件
//上传的位置
String realPath = request.getSession().getServletContext().getRealPath("/uploads");
System.out.println(realPath);
//判断该路径是否存在
File file = new File(realPath);
if (!file.exists()){
//创建该文件夹
file.mkdirs();
}
//解析request对象,获取上传文件项
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload= new ServletFileUpload(factory);
//解析request
List<FileItem> items = upload.parseRequest(request);
for (FileItem item: items) {
//进行判断,当前item是否是上传文件项
if (item.isFormField()){
//普通表单项
}else {
String uuid = UUID.randomUUID().toString().replace("-", "");
//文件上传项
String fileName = uuid + "_" +item.getName();
//完成上传
item.write(new File(file, fileName));
//删除临时文件
item.delete();
}
}
System.out.println("文件上传成功");
return "success";
}
}
2.4 配置文件解析器
<!--文件上传
id必须为="multipartResolver"
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--上传文件的大小,这里设置的是10M-->
<property name="maxUploadSize" value="10485760"></property>
</bean>
3. 使用SpringMVC方式上传文件
3.1 将控制器修改为
/**
* 使用SpringMVC方式上传文件
* MultipartFile upload: 名称应和input的name值一致
* @return
*/
@RequestMapping("/fileupload02")
public String testFileUpload2(HttpServletRequest request, /*@RequestParam(name = "upload") */MultipartFile upload) throws Exception {
//使用fileupload组件完成上传文件
//上传的位置
String realPath = request.getSession().getServletContext().getRealPath("/uploads");
System.out.println(realPath);
//判断该路径是否存在
File file = new File(realPath);
if (!file.exists()){
//创建该文件夹
file.mkdirs();
}
String uuid = UUID.randomUUID().toString().replace("-", "");
//文件上传项
String fileName = uuid + "_" + upload.getOriginalFilename();
//完成上传
upload.transferTo(new File(realPath, fileName));
System.out.println("SpringMVC文件上传成功");
return "success";
}
4.SpringMVC跨服务器实现文件上传
4.1 分服务器的目的
分服务器的目的是让服务器各司其职,从而提高项目的运行的效率
4.2 准备两个tomcat服务器,并创建一个用于存放图片的web工程
4.3 pom文件除了依赖文件上传的两个jar,还需要jersey
<!--跨服务器文件上传-->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
4.4 将控制器修改为
/**
* 跨服务器上传文件
* MultipartFile upload: 名称应和input的name值一致
* @return
*/
@RequestMapping("/fileupload03")
public String testFileUpload3(HttpServletRequest request, MultipartFile upload) throws Exception {
System.out.println("跨服务器文件上传");
//使用fileupload组件完成上传文件
//定义上传服务器路径
String path = "http://localhost:9090/uploads/";
//判断该路径是否存在
File file = new File(path);
if (!file.exists()){
//创建该文件夹
file.mkdirs();
}
String uuid = UUID.randomUUID().toString().replace("-", "");
//文件上传项
String fileName = uuid + "_" + upload.getOriginalFilename();
//创建客户端的对象
Client client = Client.create();
//和图片服务器进行连接
WebResource webResource = client.resource(path + fileName);
//完成上传
webResource.put(upload.getBytes());
System.out.println("SpringMVC文件上传成功");
return "success";
}
源码:github
SpringMVC异常处理
转载于//www.cnblogs.com/liulebin/p/11393162.html
还没有评论,来说两句吧...