SpringMVC实现文件上传
- 1. SpringMVC 传统方式的文件上传
- 1.1 第一步:导入依赖坐标
- 1.2 第二步:编写 jsp 页面
- 1.3 第三步:编写控制器
- 1.4 第四步:配置文件解析器
- 2. SpringMVC跨服务器方式文件上传
- 2.1. 搭建图片服务器 (省略)
- 2.2 实现SpringMVC跨服务器方式文件上传
- 2.2.1. 导入开发需要的jar包坐标:
- 2.2.2 编写文件上传的JSP页面
- 2.2.3 编写控制器
- 在模拟SpringMVC跨服务器方式文件上传时遇到的异常与解决
1. SpringMVC 传统方式的文件上传
1.1 第一步:导入依赖坐标
使用 Commons-fileupload 组件实现文件上传,需要导入该组件相应的支撑 jar 包:Commons-fileupload 和
commons-io。
commons-io 不属于文件上传组件的开发 jar 文件,但 Commons-fileupload 组件从 1.1 版本开始,它
工作时需要 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>
1.2 第二步:编写 jsp 页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>SpringMVC文件上传方式</h1>
<form action="file/testFileUpLoad2" method="post" enctype="multipart/form-data" >
上传文件:<input type="file" name="upload"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
1.3 第三步:编写控制器
@Controller
@RequestMapping("/file")
public class FileUpLoadController {
/**
* SpringMVC中的文件上传
* @param request
* @param upload
* @return
* @throws IOException
*/
@RequestMapping("testFileUpLoad2")
public String testFileUpLoad2(HttpServletRequest request, MultipartFile upload) throws IOException {
System.out.println("SpringMVC上传文件方式...");
//获取上传文件位置
String realPath = request.getSession().getServletContext().getRealPath("upload");
File file = new File(realPath);
//判断路径是否存在
if (!file.exists()){
//创建该文件夹
file.mkdir();
}
//获取上传文件的名称
String filename = upload.getOriginalFilename();
//把文件的名称设置唯一值,uuid
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid +"_" + filename;
//完成文件上传
upload.transferTo(new File(realPath,filename));
return "success";
}
}
1.4 第四步:配置文件解析器
<!-- 配置文件解析器对象 id 的值是固定的 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
**注意:**文件上传的解析器 id是固定的,不能起别的名称,否则无法实现请求参数的绑定。(不光是文件,其他 字段也将无法绑定)
2. SpringMVC跨服务器方式文件上传
2.1. 搭建图片服务器 (省略)
- 根据文档配置tomcat9的服务器,现在是2个服务器
- 导入资料中day02_springmvc5_02image项目,作为图片服务器使用
2.2 实现SpringMVC跨服务器方式文件上传
2.2.1. 导入开发需要的jar包坐标:
<dependencies>
<!-- 跨服务器上传文件jar包 -->
<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>
</dependencies>
2.2.2 编写文件上传的JSP页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>跨服务器文件上传方式</h1>
<form action="file/testFileUpLoad3" method="post" enctype="multipart/form-data" >
上传文件:<input type="file" name="upload"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
2.2.3 编写控制器
/**
* 跨服务器上传
* @return
*/
@RequestMapping("/testFileUpLoad3")
public String testFileUpLoad(MultipartFile upload) throws IOException {
System.out.println("跨服务上传方法执行了");
//定义跨服务器路径
String path = "http://localhost:9090/fileUpLoadService/uploads/";
//获取文件名
String filename = upload.getOriginalFilename();
//把文件设置成唯一值 uuid
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + "_" + filename;
//创建客户端
Client client = Client.create();
//上传数据
WebResource webResource = client.resource(path + filename);
webResource.put(upload.getBytes());
return "success";
}
在模拟SpringMVC跨服务器方式文件上传时遇到的异常与解决
异常解决参考: