SpringMVC实现文件上传
1.文件上传步骤
- 导入文件上传的jar包
- 编写文件上传的JSP页面
- 编写文件上传的Controller控制器
<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>
<form action="upload/uploadSpringMVC" enctype="multipart/form-data" method="post">
上传文件<input type="file" name="upload"><br>
<input type="submit" value="提交">
</form>
SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的 name属性名称相同
/**
* SpringMVC方式的文件上传
*
* @param request
* @param upload
* @return
* @throws IOException
*/
@RequestMapping("/uploadSpringMVC")
public String uploadSpringMVC(HttpServletRequest request, MultipartFile upload) throws IOException {
// 获取上传文件的服务器下的目录
String realPath = request.getSession().getServletContext().getRealPath("/uploads");
//创建File对象,实例化realPath
File file = new File(realPath);
//判断是否存在,不存在则创建
if (!file.exists()) {
file.mkdirs();
}
//获取要上传文件的名称
String filename = upload.getOriginalFilename();
//生成随机uuid
String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();
//文件名称进行唯一化
filename = uuid + filename;
//上传文件
upload.transferTo(new File(file, filename));
return "success";
}
配置文件解析器对象
<!--配置文件解析器对象,要求id名称必须是multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置最大上传文件的大小为10M-->
<property name="maxUploadSize" value="10485760"></property>
</bean>
2. SpringMVC跨服务器方式文件上传
1. 搭建图片服务器
2. 导入开发需要的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>
3. 编写文件上传的JSP页面
<form action="upload/uploadReturnServer" enctype="multipart/form-data" method="post">
上传文件<input type="file" name="image"><br>
<input type="submit" value="提交">
</form>
4. 编写控制器
/**
* 跨服务器上传
*
* @param image
* @return
* @throws IOException
*/
@RequestMapping("/uploadReturnServer")
public String uploadReturnServer(MultipartFile image) throws IOException {
//定义图片服务器的请求路径
//要在图片服务器的部署根目录下(target中找)新建uploads文件夹,否则会出现401异常,找不到文件夹
String url = "http://localhost:8085/uploads/";
//获取要上传文件的名称
String filename = image.getOriginalFilename();
String subFileName = filename.substring(filename.lastIndexOf("."));
//生成随机uuid
String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();
//文件名称进行唯一化
filename = uuid + subFileName;
//向图片服务器上传文件
//创建客户端对象
Client client = Client.create();
//连接图片服务器
WebResource resource = client.resource(url + filename);
//上传文件
resource.put(image.getBytes());
return "success";
}
注:
跨服务器上传到自己的tomcat另一个服务器时,如果页面出现了405的错误,需要在tomcat的conf文件夹下的web.xml加入下面代码:
<init-param>
<!--使得服务器允许文件写入 -->
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>