springMVC圖片文件上傳功能的實現

  1. 在工程依賴庫下添加文件上傳jar包

commons-fileupload-1.2.2.jarhtml

commons-io-2.4.jarjava

2.jsp頁面設置form表單屬性enctypeweb

在表單中上傳圖片時,須要在form的屬性設置中添加enctype="multipart/form-data"。spring

[html] view plain copymvc

<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進制的方式傳過去。app

  1. springMVC.xml添加multipart類型解析器

在頁面form中提交enctype="multipart/form-data"的數據時,須要springmvc對multipart類型的數據進行解析,須要在springmvc.xml中配置multipart類型解析器。dom

[html] view plain copyeclipse

<!-- 文件上傳 -->  
<bean id="multipartResolver"  
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    <!-- 設置上傳文件的最大尺寸爲5MB -->  
    <property name="maxUploadSize">  
        <value>5242880</value>  
    </property>  
</bean>

4.建立圖片虛擬目錄,以存放圖片jsp

eclipse IDE 經過界面進行配置:servers -->Tomcat v8.0 Server at localhost--> 雙擊,選擇-->add external web modules.post

在圖片虛擬目錄中,必定將圖片目錄分級建立(提升i/o性能),通常咱們採用按日期(年、月、日)進行分級建立。

  1. jsp 頁面,設置圖片顯示的位置和大小。

[html] view plain copy

<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>  
lt;/tr>
  1. Controller 類方法中寫相應的方法

<1, 方法的參數中添加MultipartFile items_pic行參 這個跟頁面的圖片的參數名字是一致的;

<2, 爲了不文件名稱相同而衝突,使用UUID.randomUUID()產生一個隨機的數值做爲名稱;

<3. 將圖片數據寫入磁盤:items_pic.transferTo(newFile);

<4. 更新itemsCustom中屬性pic的值itemsCustom.setPic(newFileName);
[java] view plain copy

//在須要校驗的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

相關文章
相關標籤/搜索