SpringMVC 文件上传

1.在实际开发中,系统设置一个专门的文件上传服务器,用于存储各种资源文件
             我们在此演示,使用在文件系统内创建一个物理文件存储位置,和在tomcat中设置一个虚拟文件服务区
                  1.可以通过在eclipse内Tomcat服务器module视图下添加Web Module
                        Document base:虚拟目录对应的物理路径
                        Path: 虚拟目录


                  2.可以通过在tomcat安装目录下的conf目录下的server.xml文件中进行配置
                        <Context docBase="D:\Myself\Upload Physical Path\pic" path="/pic" reloadable="true"/>
                        注意: 在文件虚拟目录中一定要将文件目录进行分级,这样可以提高程序的IO效率,(假如不分级,将所有的文件放在一个目录下,查询文件时,需要遍历整个目录,实在是一件低效的事情)
                        在实际开发过程中,我们通常将文件按照日期分级(年,月,日),这样便可以按照年月日来快速查找文件,效率得到提高

 2.要想使用文件上传功能需要引入文件上传实现类的jar包
               

<!--文件上传 -->
<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>${commons-fileupload}</version>
</dependency>
<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>${commons-io}</version>
</dependency>	

3.编写文件解析器 MultipartResolver 也是由前端控制器(DispatcherServlet)管理执行

<!--文件解析器 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!--设置文件最大上传大小 5M -->
		<property name="maxUploadSize" value="5242880" />
	</bean>

4.前端页面文件上传,需要申明类型    

//注意文件上传标签的name必须和后端MultipartFile参数名一致,形成参数绑定
 

<form id="uploadForm" action="${pageContext.request.contextPath}/fileUpload" method="post" enctype="multipart/form-data">
      <c:if test="${itemFile!=null}">
         <img src="/pic/${itemFile}" width="200" height="100"><br>
      </c:if>
      <input type="file" name="itemFile"/><br>
      <input type="submit" name="上传"/>
</form>    

5.编写controller请求处理方法 "/fileUpload"         

             1.定义MultipartFile形参,将参数名和前端文件上传标签name一致,参数绑定
             2.获取文件原始名,
             3.使用uuid拼接文件名和其文件后缀,防止名字重复
             4.将现有的文件名存储到数据库,将文件资源写到磁盘中

@RequestMapping(value = "/fileUpload")
	public ModelAndView uploadFile(MultipartFile itemFile) throws Exception {

		ModelAndView modelAndView = new ModelAndView();

		String originalFilename = null;
		String newFileName = null;
		if (!itemFile.isEmpty()) {
			// 获取文件原始名
			originalFilename = itemFile.getOriginalFilename();
			// 定义文件新名字
			newFileName = UUID.randomUUID()
					+ itemFile.getOriginalFilename().substring(originalFilename.lastIndexOf("."));
			// 按日期分级存储
			/*
			 * Calendar cal = Calendar.getInstance(); String
			 * Year=String.valueOf((cal.get(cal.YEAR))); //老外把一月份整成了0,翻译成中国月份要加1 String
			 * Month=String.valueOf((cal.get(cal.MONTH)+1)); String
			 * Day=String.valueOf((cal.get(cal.DATE)));
			 */
			// 将文件按照新名字存储到物理地址
			// File file=new File("D:\\Myself\\Upload Physical Path\\pic\\"+Year+"\\"+Month+"\\"+Day+"\\"+newFileName);

			// 将文件按照新名字存储到物理地址
			File file = new File("D:\\Myself\\Upload Physical Path\\pic\\" + newFileName);
			// 如果文件目录已经存在
			if (!file.getParentFile().exists()) {
				file.getParentFile().mkdirs();
			} else {
				itemFile.transferTo(file);
			}
		}else {
			throw new CustomException("请用户选择需要上传的文件");
		}
		// 新的文件名存储到itemFile
		modelAndView.addObject("itemFile", newFileName);
		// 依旧返回index.jsp页面
		modelAndView.setViewName("index.jsp");
		return modelAndView;
	}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值