一.搭建环境
在maven工程中新建Module命名为fileuploadserver创建方式和方法和前面springMVC搭建的环境一样的方式
搭建完成后的项目结构如下:
搭建后的fileuploadserver作为上传文件服务器,现在为此配置tomcat服务器
二.编写上传文件代码
1.控制器类的创建
UserController.java中的代码如下:
package cn.lut.controller;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
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.util.List;
import java.util.UUID;
@Controller
@RequestMapping("/user")
public class UserController {
//跨服务器方式上传
@RequestMapping("/fileUpload3")
public String fileUpload3(MultipartFile upload)throws Exception{
System.out.println("跨服务器文件上传");
//定义上传服务器的路径
String path="http://localhost:9090/uploads/";
//说明上传文件项
//获取上传文件的名称
String filename=upload.getOriginalFilename();
//把文件的名称设置为唯一值
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方式上传
@RequestMapping("/fileUpload2")
public String fileUpload2(HttpServletRequest request, MultipartFile upload)throws Exception{
/*注意MultipartFile upload这个命名upload必须和页面中的
* <input type="file" name="upload"/>file的name一致*/
System.out.println("springMVC文件上传");
//使用fileUpload组件完成上传
//上传的位置
String path=request.getSession().getServletContext().getRealPath("/uploads/");
//判断路径是否存在
File file=new File(path);
if(!file.exists()){
//创建该文件夹
file.mkdirs();
}
//说明上传文件项
//获取上传文件的名称
String filename=upload.getOriginalFilename();
//把文件的名称设置为唯一值
String uuid= UUID.randomUUID().toString().replace("-","");
filename=uuid+"_"+filename;
//完成文件的上传
upload.transferTo(new File(path,filename));
return "success";
}
//传统方式上传
@RequestMapping("/fileUpload1")
public String fileUpload1(HttpServletRequest request)throws Exception{
System.out.println("文件上传");
//使用fileUpload组件完成上传
//上传的位置
String path=request.getSession().getServletContext().getRealPath("/uploads/");
//判断路径是否存在
File file=new File(path);
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){
//判断当前对象是否是上传文件项
if(item.isFormField()){
//普通表单项
}else {
//说明上传文件项
//获取上传文件的名称
String filename=item.getName();
//把文件的名称设置为唯一值
String uuid= UUID.randomUUID().toString().replace("-","");
filename=uuid+"_"+filename;
//完成文件的上传
item.write(new File(path,filename));
//删除临时文件
item.delete();
}
}
return "success";
}
}
2.配置文件的编写
①web.xml的相关配置如下:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--前端控制其加载配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--配置解决中文乱码的过滤器-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
②springmvc.xml的相关配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解扫描-->
<context:component-scan base-package="cn.lut"></context:component-scan>
<!--视图的解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--配置文件解析器对象-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--注意文件解析器对象配置中id必须为:multipartResolver-->
</bean>
<!--开启注解springMVC的支持-->
<mvc:annotation-driven/>
</beans>
3.相关页面的编写
①success.jsp中的代码编写如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>upload success</h3>
</body>
</html>
②index.jsp中的代码编写如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>传统方式文件上传</h3>
<form action="user/fileUpload1" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload"/><br/>
<input type="submit" value="上传"/>
</form>
<h3>SpringMVC方式文件上传</h3>
<form action="user/fileUpload2" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload"/><br/>
<input type="submit" value="上传"/>
</form>
<h3>跨服务器方式文件上传</h3>
<form action="user/fileUpload3" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload"/><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>