springmvc图片上传

1. 在工程依赖库下添加文件上传jar包

commons-fileupload-1.2.2.jar

commons-io-2.4.jar

2.jsp页面设置form表单属性enctype

在表单中上传图片时,需要在form的属性设置中添加enctype="multipart/form-data"。

  1. <form id="itemForm" action="${pageContext.request.contextPath }/items/editItemsSubmit.action" method="post" enctype="multipart/form-data" >  
<form id="itemForm" action="${pageContext.request.contextPath }/items/editItemsSubmit.action" method="post" enctype="multipart/form-data" >

表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作. enctype="multipart/form-data"是上传二进制数据;form里面的input的值以2进制的方式传过去。

3. springMVC.xml添加multipart类型解析器

在页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析,需要在springmvc.xml中配置multipart类型解析器。

  1. <!-- 文件上传 -->  
  2. <bean id="multipartResolver"  
  3.     class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  4.     <!-- 设置上传文件的最大尺寸为5MB -->  
  5.     <property name="maxUploadSize">  
  6.         <value>5242880</value>  
  7.     </property>  
  8. </bean>  
	<!-- 文件上传 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 设置上传文件的最大尺寸为5MB -->
		<property name="maxUploadSize">
			<value>5242880</value>
		</property>
	</bean>

4.创建图片虚拟目录,以存放图片

eclipse IDE 通过界面进行配置:servers -->Tomcat v8.0 Server at localhost--> 双击,选择-->add external web modules.

在图片虚拟目录中,一定将图片目录分级创建(提高i/o性能),一般我们采用按日期(年、月、日)进行分级创建。

5. jsp 页面,设置图片显示的位置和大小。

  1. <tr>  
  2. <td>商品图片</td>  
  3. <td>  
  4.     <c:if test="${itemsCustom.pic !=null}">  
  5.         <img src="/pic/${itemsCustom.pic}" width=100 height=100/>  
  6.         <br/>  
  7.     </c:if>  
  8.     <input type="file"  name="items_pic"/>   
  9. </td>  
  10. lt;/tr>   
 <tr>
	<td>商品图片</td>
	<td>
		<c:if test="${itemsCustom.pic !=null}">
			<img src="/pic/${itemsCustom.pic}" width=100 height=100/>
			<br/>
		</c:if>
		<input type="file"  name="items_pic"/> 
	</td>
</tr> 
6. Controller 类方法中写相应的方法

<1, 方法的参数中添加MultipartFile items_pic行参  这个跟页面的图片的参数名字是一致的;

<2, 为了避免文件名称相同而冲突,使用UUID.randomUUID()产生一个随机的数值作为名称;

<3. 将图片数据写入磁盘:items_pic.transferTo(newFile);

<4. 更新itemsCustom中属性pic的值itemsCustom.setPic(newFileName);

  1.     //在需要校验的poJo类前加 @Validated, 后面加BindingResult bindingResult 存放出错信息。  
  2.     @RequestMapping("/editItemsSubmit")  
  3.     public String editItemsSubmit(Model model,   
  4.             HttpServletRequest request,Integer id,  
  5.             @Validated ItemsCustom itemsCustom,   
  6.             BindingResult bindingResult,  
  7.             MultipartFile items_pic)throws Exception {  
  8.           
  9.         if(bindingResult.hasErrors()){  
  10.             List<ObjectError> allErrors = bindingResult.getAllErrors();  
  11.             for(ObjectError objectError :allErrors){  
  12.                 System.out.println(objectError.getDefaultMessage());  
  13.             }  
  14.               
  15.             model.addAttribute("allErrors", allErrors);  
  16.             model.addAttribute("itemsCustom", itemsCustom);  
  17.             return "items/editItems";  
  18.         }         
  19.           
  20.         //原始名称  
  21.         String originalFilename = items_pic.getOriginalFilename();  
  22.         //上传图片  
  23.         if(items_pic!=null && originalFilename!=null && originalFilename.length()>0){          
  24.         //存储图片的物理路径  
  25.         String pic_path = "C:\\Users\\Administrator.MICROSO-U8JSS8B\\Desktop\\java_code\\picture\\";  
  26.         //新的图片名称  
  27.         String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));  
  28.         //新图片  
  29.         File newFile = new File(pic_path+newFileName);  
  30.         //将内存中的数据写入磁盘  
  31.         items_pic.transferTo(newFile);    
  32.         //将新图片名称写到itemsCustom中  
  33.         itemsCustom.setPic(newFileName);  
  34.               
  35.         }  
  36.         itemsService.updateItems(id, itemsCustom);  
  37.            
  38. //      return "success";  
  39.         return "forward:queryItems.action";  
  40.     }  
	//在需要校验的poJo类前加 @Validated, 后面加BindingResult bindingResult 存放出错信息。
	@RequestMapping("/editItemsSubmit")
	public String editItemsSubmit(Model model, 
			HttpServletRequest request,Integer id,
			@Validated ItemsCustom itemsCustom, 
			BindingResult bindingResult,
			MultipartFile items_pic)throws Exception {
		
		if(bindingResult.hasErrors()){
			List<ObjectError> allErrors = bindingResult.getAllErrors();
			for(ObjectError objectError :allErrors){
				System.out.println(objectError.getDefaultMessage());
			}
			
			model.addAttribute("allErrors", allErrors);
			model.addAttribute("itemsCustom", itemsCustom);
			return "items/editItems";
		}		
		
		//原始名称
		String originalFilename = items_pic.getOriginalFilename();
		//上传图片
		if(items_pic!=null && originalFilename!=null && originalFilename.length()>0){		
		//存储图片的物理路径
		String pic_path = "C:\\Users\\Administrator.MICROSO-U8JSS8B\\Desktop\\java_code\\picture\\";
		//新的图片名称
		String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
		//新图片
		File newFile = new File(pic_path+newFileName);
		//将内存中的数据写入磁盘
		items_pic.transferTo(newFile);	
		//将新图片名称写到itemsCustom中
		itemsCustom.setPic(newFileName);
			
		}
		itemsService.updateItems(id, itemsCustom);
		 
//		return "success";
		return "forward:queryItems.action";
	}
7.测试效果


参考:http://zkliqiang.iteye.com/blog/779285
Spring MVC是一个基于Java的开源框架,用于构建Web应用程序。它采用了MVC(Model-View-Controller)的架构模式,可以让开发人员更容易地分离关注点并实现高效的代码组织。 在Spring MVC中实现图片的上传和下载是相对简单的。下面是一个简单的步骤说明: 1. 图片上传: 首先,需要在Spring MVC的配置文件中配置一个用于上传文件的MultipartResolver。然后,创建一个Controller方法用于处理文件上传请求。在这个方法中,可以通过HttpServletRequest对象获取上传的文件,并以合适的方式保存到服务器上,例如保存到本地文件系统或将其存储到数据库中。 2. 图片下载: 为了实现图片下载功能,需要创建一个用于处理下载请求的Controller方法。在这个方法中,可以根据请求参数获取图片的存储路径或ID,并根据这个信息获取图片的数据。然后,可以将图片数据写入HttpServletResponse对象的输出流中,从而实现将图片发送给客户端进行下载的功能。 需要注意的是,在处理图片上传和下载的过程中,可能需要对上传的文件大小进行限制,并进行一些安全性的校验,以防止恶意文件上传或下载。 总结起来,Spring MVC可以通过配置MultipartResolver实现图片的上传功能,并通过Controller方法处理上传和下载请求,将图片保存或发送给客户端。通过这些步骤的实现,可以实现方便可靠的图片上传和下载功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值