一、文件上传过程
- 构建文件名
- 指定服务器端文件所存储的路径
- 转存到指定的路径
二、案例
- 导入所需要的jar包并配置
- 在SpringMVC的配置文件中添加配置一个用于文件上传的组件
<!--注册文件上传组件-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
- 创建一个用于文件上传的表单页面imageupload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/admin/up.action" method="post" enctype="multipart/form-data">
<p>图片:</p>
<input type="file" name="upload">
<input type="submit" value="上传">
</form>
</body>
</html>
- 创建一个新的工具包utils并添加文件名处理的工具FileNameUtil.java
package com.oracle.utils;
import java.util.UUID;
public class FileNameUtil {
//根据UUID生成文件名去掉UUID之间的横杠
public static String getUUIDFileName() {
UUID uuid = UUID.randomUUID();
return uuid.toString().replace("-", "");
}
//从请求头中提取文件名和类型
public static String getRealFileName(String context) {
// Content-Disposition: form-data; name="upload"; filename="a_left.jpg"
int index = context.lastIndexOf("=");
String filename = context.substring(index + 2, context.length() - 1);
return filename;
}
//根据给定的文件名和后缀截取后缀
public static String getFileType(String fileName){
//9527s.jpg
int index = fileName.lastIndexOf(".");
return fileName.substring(index);
//8b7cb153974c4947ad6934a3213dd1f4.jpg
}
}
- 在web目录下创建一个包images用于存储文件
- 创建一个show.jsp显示图片
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
图片:<img src="${pageContext.request.contextPath}/images/${imgname}">
</body>
</html>
- 创建一个新的控制器组件编写文件上传的方法
ImageUploadAction.java
package com.oracle.controller;
import com.oracle.utils.FileNameUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
@Controller
@RequestMapping("/admin")
public class ImageUploadAction {
@RequestMapping("/up")
public String up(@RequestParam MultipartFile upload, HttpServletRequest request){
//构建文件名,使用UUID起名,使用原始文件的后缀
String saveFileName= FileNameUtil.getUUIDFileName()+FileNameUtil.getFileType(upload.getOriginalFilename());
System.out.println("构建的文件名字"+saveFileName);
//指定服务器端存储路径
String path=request.getServletContext().getRealPath("/images");
System.out.println("服务器端存储路径"+path);
//进行文件流转存 C:\Users\25717\Desktop\idea-workspace\springmvc_01\web\images\
//try catch快捷键 ctrl+alt+t
try {
upload.transferTo(new File(path+saveFileName));
} catch (IOException e) {
e.printStackTrace();
}
request.setAttribute("imgname",saveFileName);
return "show";
}
}
- 运行前将工程名的后缀改为web否则无法将文件存储到images下
- 运行项目,项目会默认跳转到index.jsp页面,需要手动在imageupload.jsp运行,且由于注册springmvc时后缀都是action所以需要手动改为jsp
- 运行结果.
点击上传后