说明:这个图片类文件上传的步骤是我经过验证的,在SSM框架下完成,搭建框架的部分不在这里说明。
第一步:添加两个项目需要的依赖。(pom.xml)
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>
第二步:配置图片文件解析器,及一些参数。(springmvc.xml)
<bean id="multipartResolver" class="org.springframework.monsMultipartResolver" ><property name="maxUploadSize" value="104857600"/><property name="defaultEncoding" value="utf-8"/><property name="maxInMemorySize" value="40960"/></bean>
第三步:创建数据传输类
public class UserDto {private User user;private MultipartFile multipartFile;}
第四步:设置form表单
1.这里注意数据传输模型的使用:modelAttribute=“userDto”
2.表单的设置:enctype=“multipart/form-data”
<form:form action="/user/upload" method="post" enctype="multipart/form-data" modelAttribute="userDto">用户名:<form:input path="user.username"/>密码: <form:password path="user.password"/>头像: <form:input type="file" path="multipartFile"></form:form>
第五步:封装一个处理图片的工具类,大概分为一下几个步骤
(1)验证传入的图片非空
(2)定义图片的存储路径 realPath
(3)得到原始图片名:xxoo.jpg
(4)创建新的唯一图片名 = uuidName + .扩展名 9d76abf6-2702-4d18-881d-4e151b5445f3.jpg
(5)封装上传的文件将要存储的 全路径 = 路径 + 文件名
C:\java\ide-workspace\project-a\pa-web\target\pa-web\libs\img\9d76abf6-2702-4d18-881d-4e151b5445f3.jpg
(6)把图片文件转移至 全路径
(7)返回新图片名 newImageName
public Class UploadTool{public static String uploadImage(MultipartFile imageFile){String newImageName = null;if (!imageFile.isEmpty()) { //(1)String realPath = "C:\\java\\images\\"; //(2)String originalName = imageFile.getOriginalFilename(); //(3)String uuidName = UUID.randomUUID().toString(); //(4)newImageName = uuidName + originalName.substring(originalName.lastIndexOf(".")); //(4)File file = new File(realPath + newImageName); //(5)imageFile.transferTo(file); //(6)return newImageName; //(7)}}
第六步:控制器接收数据模型,完成图片的上传,图片名的保存。
1.UserDto是前面封装的数据传输 模型
2.调用第五步封装的工具类完成图片的上传,得到图片唯一的名字
3.把新的图片名保存在user对象
4.保存之后跳转到用户详情页
@RequestMapping("/user")@Controller("userController")public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/upload")public String upload(UserDto userDto){User user = userDto.getUser();MultipartFile multipartFile = userDto.getMultipartFile();String imageName = UploadTool.uploadImage(MultipartFile multipartFile);user.setImageName(imageName);userService.insert(user);return"user_detail";}
第七步:图片保存路径的设置与图片浏览路径的获得
1.把图片保存在项目里面
1-1. webapp下面创建目录 "/libs/image"用来保存图片(第五步已完成)
String realPath = request.getSession().getServletContext().getRealPath("/libs/image");
1-2. 前端展示图片的url路径为:
<img src="${pageContext.request.contextPath}/libs/image/${imageName}" />
2.把图片保存在电脑上
2-1. 配置图片存放的物理路径与虚拟路径,
打开tomcat\conf\server.xml文件在Host标签下加上如下配置
C:\java\images 是图片存放的物理路径,/images 是访问图片的虚拟路径
<Host><Context docBase="C:\java\images" path="/images"/></Host>
2-2. 在tomcat设置里面配置 虚拟访问路径 与 物理存放路径的映射
点击External Source
选择创建的物理存储路径 C:\java\images
把虚拟路径 /images 映射到 images文件夹
2-3. 图片的访问路径如下
<img src="${pageContext.request.contextPath}/images/${imageName}"/>
3.把图片保存在专用的图片服务器
这点还没有搞明白,有高手指点请留言,提前感谢… …