SSM框架:springmvc实现图片的上传与图片上传路径的设置

说明:这个图片类文件上传的步骤是我经过验证的,在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.web.multipart.commons.CommonsMultipartResolver" >
    <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 {

    @Autowired
    private 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
点击External Source

选择之前设置好的存储图片的物理路径
选择创建的物理存储路径 C:\java\images
在这里插入图片描述
把虚拟路径 /images 映射到 images文件夹
2-3. 图片的访问路径如下

<img src="${pageContext.request.contextPath}/images/${imageName}"/>

3.把图片保存在专用的图片服务器
这点还没有搞明白,有高手指点请留言,提前感谢… …

  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值