springmvc踩坑记

今天尝试用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>










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值