<form>
表单的enctype属性取值必须是multipart/form-data
,表示表单内容是分块的
<form>
表单的method属性取值必须是post,因为get有长度限制
提供一个<input>
标签,type属性取值是file,用来上传文件
导入文件上传的相关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>
部署在Tomcat服务器上时,文件上传的目录在Tomcat\apache-tomcat-8.5.43\webapps\项目名目录下
/**
* 传统方式文件上传
* @param request
* @return
* @throws Exception
*/
@RequestMapping(path = "/fileUpload1")
public String fileUpload1(HttpServletRequest request) throws Exception {
System.out.println("传统方式文件上传");
//先获取要上传的文件目录
String realPath = request.getSession().getServletContext().getRealPath("/uploads");
//创建File对象,向该路径下上传文件
File file = new File(realPath);
//判断该路径是否存在,如果不存在,创建该路径
if(!file.exists()){
file.mkdirs();
}
//创建磁盘文件项工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//解析request对象
List<FileItem> fileItems = upload.parseRequest(request);
// 遍历
for (FileItem fileItem : fileItems) {
//判断文件项是普通表单项还是上传的文件
if(fileItem.isFormField()){
}else{
//获取上传文件的名称
String filename = fileItem.getName();
//把文件的名称设置唯一值,使用uuid
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + filename;
//上传文件
fileItem.write(new File(file,filename));
//删除临时文件
fileItem.delete();
}
}
return "success";
}
SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的
name属性名称相同
<h1>SpringMVC文件上传</h1>
<form action="file/fileUpload2" method="post" enctype="multipart/form-data">
文件上传:<input type="file" name="fileUpload"><br>
<input type="submit" value="上传文件">
</form>
/**
* SpringMVC文件上传
* @param request
* @param fileUpload
* @return
* @throws Exception
*/
@RequestMapping(path = "/fileUpload2")
public String fileUpload2(HttpServletRequest request, MultipartFile fileUpload) throws Exception {
System.out.println("SpringMVC文件上传");
//先获取要上传的文件目录
String realPath = request.getSession().getServletContext().getRealPath("/uploads");
//创建File对象,向该路径下上传文件
File file = new File(realPath);
//判断该路径是否存在,如果不存在,创建该路径
if(!file.exists()){
file.mkdirs();
}
//获取上传文件的名称
String filename = fileUpload.getOriginalFilename();
//把文件的名称设置唯一值,使用uuid
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + filename;
//上传文件
fileUpload.transferTo(new File(file,filename));
return "success";
}
配置文件解析器对象,在SpringMVC.xml中添加配置
<!--配置文件解析器,要求id必须是multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/><!--限制上传的文件大小-->
</bean>
搭建图片服务器
导入跨服务器所需的jar包,在pom.xml中添加依赖的坐标
<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>
创建文件上传的jsp页面
<h1>SpringMVC跨服务器文件上传</h1>
<form action="file/fileUpload3" method="post" enctype="multipart/form-data">
文件上传:<input type="file" name="fileUpload"><br>
<input type="submit" value="上传文件">
</form>
创建控制器
/**
* SpringMVC跨服务器方式的文件上传
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value="/fileupload3")
public String fileupload3(MultipartFile upload) throws Exception {
System.out.println("SpringMVC跨服务器方式的文件上传...");
// 定义图片服务器的请求路径
String path = "http://localhost:9090/springmvc_fileUpload/uploads/";
// 获取到上传文件的名称
String filename = upload.getOriginalFilename();
String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
// 把文件的名称唯一化
filename = uuid+"_"+filename;
// 向图片服务器上传文件
// 创建客户端对象
Client client = Client.create();
// 连接图片服务器
WebResource webResource = client.resource(path+filename);
// 上传文件
webResource.put(upload.getBytes());
return "success";
}
原文:https://www.cnblogs.com/codeDD/p/12699129.html