今天尝试用springmvc上传图片。因为上传图片不像表单上传只需要几个key,value,所以form标签的enctype属性值为multipart/form-data,一个图片上传字段,还有其他一下字段,
代码如下:
<form method="post" action="${pageContext.request.contextPath}/item/addItem.do" enctype="multipart/form-data" > 商品名称:<input name="name" value="${item.name}" /><br> 商品价格:<input name="price" value="${item.price}" /><br> 商品描述:<input name="description" value="${item.description}" /><br> 创建日期:<input name="createtime" value="${item.createtime}" /><br> 商品图片:<input type="file" name="uploadImg"/> <input type="submit" value="go" /> </form>
在后台java控制器中接收参数
@RequestMapping("/addItem.do") public String addItem(@ModelAttribute(value = "item") customItem citem, MultipartFile uploadImg){ //server.addItem( citem ); return "addItemPage"; }
当然,为了能让springmvc框架处理表单上传的数据,需要在springmvc的控制文件中加入如下配置,这里我说的处理是当表单的enctype=‘multipart/form-data’ 的时候需要下面这个类来处理一下数据,但是以下的配置方式是错误的。
<bean id="multipart" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" > <property name="maxUploadSize" value="5242880" ></property> </bean>
我把id取名为multipart时,springmvc 获取不到这个bean, 可以看一下源码
private void initMultipartResolver(ApplicationContext context) { try { this.multipartResolver = (MultipartResolver)context.getBean("multipartResolver", MultipartResolver.class); if(this.logger.isDebugEnabled()) { this.logger.debug("Using MultipartResolver [" + this.multipartResolver + "]"); } } catch (NoSuchBeanDefinitionException var3) { this.multipartResolver = null; if(this.logger.isDebugEnabled()) { this.logger.debug("Unable to locate MultipartResolver with name \'multipartResolver\': no multipart request handling provided"); } } }
这段代码在DispatcherServlet类中。
它通过multipartResolver 来获取bean,所以在写bean的id的时候不能必须为multipartResolver,不能自定义(当然不是绝对的)任意的id;
真确的配置如下
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" > <property name="maxUploadSize" value="5242880" ></property> </bean>