SSM项目中实现文件上传并保存到本地文件夹中

1. 前言

         之前使用Servlet实现文件(图片)上传,并将图片保存到当前项目的路径下,在页面通过img标签将图片显示。但这会出现一个问题:把Tomcat服务器停止后,再启动,就会发现之前上传到Tomcat中的图片全消失了。这是因为再次启动Tomcat时,Tomcat会重新部署此项目,那么之前的项目会被覆盖掉,所以,上传的文件会消失,在页面的img标签中不能访问。
         所以,把需要上传的文件不能保存到此项目下,可以保存到其他路径/磁盘下,即使,Tomcat重启那也不会影响到上传的文件。在真实的项目开发中,公司会有专门的文件服务器进行存储图片。
        由于自己在做毕设时,在上传文件这块碰了很多壁,所以,稍加记录一下。这里,我就在毕设项目中进行演示。在原项目中添加了两个Jsp文件—test.jsp和success.jsp

2. DEMO功能描述

在浏览器中输入:http://localhost:8080/test,跳转到test.jsp页面。test.jsp页面就是一个表单提交信息—添加酒店:

  • 填写酒店相应信息,并上传酒店的图片。上传成功后会往数据库添加一条数据,也会存储图片的名称
  • 跳转到success.jsp,从数据库读取酒店的图片路径,并显示。

3. DEMO技术栈

3.1 后台技术栈

.开发工具:IDEA2018
.开发框架:SSM
.包管理工具:MAVEN

4. DEMO开发流程

SSM项目中实现文件上传并保存到本地文件夹中_第1张图片
IndexController

@Controller
public class IndexController {
    @RequestMapping(value = "/test")
    public String test() {
        return "test";
    }
}

跳转到test.jsp页面

test.jsp


酒店名称:
酒店图片:

【注意】:

  1. enctype=“multipart/form-data”
  2. 输入框中的name="HotelImage"要与后台的MultipartFile 类型的属性名一致,且不要和实体类Hotel中表示图片的属性名相同

addHotel控制器
这里使用了springmvc技术的文件上传,所以别忘了,要在springmvc.xml中配置文件上传

@RequestMapping("/addHotel")
public String addHotel(Hotel hotel, MultipartFile HotelImage, Model model) {
    if (HotelImage.getSize() != 0) {
        String path = "E:/workspace/project/upload";
        String imageName = UploadUtil.upload(HotelImage,path);
        hotel.setPic(imageName);
    }
    hotelService.addHotel(hotel);
    model.addAttribute("hotel", hotel);
    return "success";
}

这里的path= “E:/workspace/project/upload” 就是要保存图片的目录(用户可自定义)。即:上传的图片都存储在这个文件夹中。

也在数据库中存储了酒店图片的路径(图片名称):
SSM项目中实现文件上传并保存到本地文件夹中_第2张图片

upload()

public class UploadUtil {
	public static String upload(MultipartFile file, String basePath) {
		String uuid = UUID.randomUUID().toString();
		String orgFileName = file.getOriginalFilename();
		String ext= "." + FilenameUtils.getExtension(orgFileName);
		String fileName = uuid + ext;
		try {
			File targetFile = new File(basePath, fileName);
			FileUtils.writeByteArrayToFile(targetFile, file.getBytes());
			return fileName;

		} catch (IOException e) {
			e.printStackTrace();
		}
		return "";
	}
}

这里是使用了FileUtils.writeByteArrayToFile()进行保存图片。

配置虚拟目录

还需要配置虚拟目录,这样才能在页面中访问,这里有两种方法。
想了解详情,请查看 这篇博客

法1:修改tomcat中的server.xml

设置Tomcat的安装目录下E:\Tomcat8\conf\server.xml文件中“host”标签中添加配置:


path:虚拟路径
docBase:保存图片的绝对地址

什么意思呢?
举例:
SSM项目中实现文件上传并保存到本地文件夹中_第3张图片
访问docBase指向的文件夹下的一张图片1.jpg,则这样访问:localhost:8080/upload/1.jpg

访问路径前需要添加“upload”

法2:使用IDEA工具
SSM项目中实现文件上传并保存到本地文件夹中_第4张图片
SSM项目中实现文件上传并保存到本地文件夹中_第5张图片
SSM项目中实现文件上传并保存到本地文件夹中_第6张图片
选择需要保存图片的目录
在这里插入图片描述
添加虚拟目录

success.jsp


    

访问前添加“upload”

配置了虚拟目录后,无论Tomcat重启多少次后,还是可以访问上传后的图片的。

你可能感兴趣的:(SSM)