Spring学习笔记-SpringMVC文件上传

SpringMVC的文件上传基于Apache是Commons FileUpload组件,所以在利用SpringMVC实现文件上传时,需要导入commons fileupload组件的相关jar包:

commons-fileupload-x.y.jar
commons-is-x.y.jar

下面以一个示例的形式来说明具体的实现方式:

  • 编写Domain类
package com.springmvc.test.domain;

import java.io.Serializable;
import java.util.List;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.springframework.web.multipart.MultipartFile;

/**
 * @Description: 文件上传测试
 * @Author:Zander
 * @CreateDate:Aug 20, 2015
 * @Company:
 */
@SuppressWarnings("serial")
public class UploadProduct implements Serializable{

    @NotNull
    @Size(min=1,max=10)
    private String name;

    private String description;
    private Float price;
    //Multipart封装上传的文件
    private List<MultipartFile> images;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public Float getPrice() {
        return price;
    }
    public void setPrice(Float price) {
        this.price = price;
    }
    public List<MultipartFile> getImages() {
        return images;
    }
    public void setImages(List<MultipartFile> images) {
        this.images = images;
    }
}

其中的MultipartFile类似于File的包装类,Spring将上传的文件封装成MultipartFile对象。

  • 编写Controller控制器
package com.springmvc.test.controller;


import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import com.springmvc.test.domain.UploadProduct;

/**
 * @Description: 文件上传测试Controller
 * @Author:Zander
 * @CreateDate:Aug 20, 2015
 * @Company:
 */
@Controller
public class ProductController {

    private static final Logger logger = Logger.getLogger(ProductController.class);

    @RequestMapping(value="/product_input")
    public String inputProduct(Model model){
        model.addAttribute("product", new UploadProduct());
        return "fileupload";
    }


    public String saveProduct(HttpServletRequest request, 
               @ModelAttribute UploadProduct product,
               BindingResult bingdingResult, Model model){

        List<MultipartFile> files = product.getImages();
        List<String> fileNameList = new ArrayList<String>();

        if(null != files && files.size() > 0){
            for(MultipartFile multipartFile : files){
                String fileName = multipartFile.getOriginalFilename();
                fileNameList.add(fileName);

                File imageFile = new File(request.getRealPath("/image"),fileName);
                try {
                    //将内容复制到imageFile中,做进一步处理
                    multipartFile.transferTo(imageFile);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return "productDetails"; 
    }

}
  • 修改SpringMVC配置文件
    添加一下两个bean,用于支持springMVC的文件上传
<bean id="messageSource" class="org.springframework.context.
      support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/resource/messages"/>
</bean>

<!-- 添加处理文件上传的bean -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="2000000"/>
</bean>
  • 页面表单
    页面表单中的书写方式与大多数文件上传类似
<input type="file" name="images[0]">
<input type="file" name="images[1]"/>
.....

注意的是name属性要与Domain中的用于封装文件对象的List<MultipartFile>名称一致,后面以数组的形式表示它 下标。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值