1. 程式人生 > >Spring MVC文件上傳下載

Spring MVC文件上傳下載

cep load original org rip println smu 選擇 ble

---恢復內容開始---

文件的上傳下載時項目開發最常用到的功能,上傳文件時表單必須進行如下設置:

  1. 將method 設置為POST
  2. 並將enctype設置為multipart/data

這樣瀏覽器才會將用戶選擇的文件二進制數據發送給服務器

Springle MVC為文件上傳提供了直接的支持,,這種支持是用MultipartResolver實現,SpringMVC上傳需要依賴Apache Commons FileUpload的支持

即需要commons-fileupload-xx.jar架包,

這裏先來一個上傳的小例子

1、首先是在配置文件中配置MultipartResolver

 <
bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上傳文件大小上限,單位為字節(10MB) --> <property name="maxUploadSize"> <value>10485760</value> </property> <!-- 請求的編碼格式,必須和jSP的pageEncoding屬性一致,以便正確讀取表單的內容,默認為ISO-8859-1
--> <property name="defaultEncoding"> <value>UTF-8</value> </property> </bean>

2、前端頁面

<body>
    <h2>Spring MVC文件上傳</h2>
    <form action ="upload" enctype="multipart/form-data" method="post">
        <table>
<tr> <td>文件描述</td> <td><input type="text" name="description"/></td> </tr> <tr> <td>請選擇文件</td> <td><input type="file" name="file"></td> </tr> <tr> <td><input type="submit" value="上傳"></td> </tr> </table> </form> </body> </html>

3、上傳方法

@RequestMapping(value="/{formName}")
     public String loginForm(@PathVariable String formName){
        // 動態跳轉頁面
        return formName;
    }
    
    // 上傳文件會自動綁定到MultipartFile中
         @RequestMapping(value="/upload",method=RequestMethod.POST)
         public String upload(HttpServletRequest request,
                @RequestParam("description") String description,
                @RequestParam("file") MultipartFile file,
                Model model) throws Exception{
             
            System.out.println(description);
            // 如果文件不為空,寫入上傳路徑
            if(!file.isEmpty()){
                // 上傳文件路徑
                String path = request.getServletContext().getRealPath(
                        "/images/");
                // 上傳文件名
                String filename = file.getOriginalFilename();
                File filepath = new File(path,filename);
                // 判斷路徑是否存在,如果不存在就創建一個
                if (!filepath.getParentFile().exists()) { 
                    System.out.println("路徑不存在");
                    filepath.getParentFile().mkdirs();
                }
                System.out.println(filepath.getParentFile());
                // 將上傳文件保存到一個目標文件當中
                file.transferTo(new File(path+File.separator+ filename));
                return "success";
            }else{
                return "error";
            }
             
         }
    

Spring MVC會將上傳的文件綁定到MultipartFile中,MultipartFile提供獲得上傳文件的內容,文件名的方法,通過transTo()方法還可以將文件存儲在硬件中,MultipartFile

常用的方法如下:

  1. byte[] getByte():獲取文件
  2. String getContentType():獲取文件MIME類型,如image/jpeg
  3. InputStream getInputStream()獲取文件流
  4. String getName().獲取表單中文件組件的名字
  5. String getOriginalFilename()獲得上傳文件的原名
  6. long getSize():獲取文件字節大小
  7. boolean isEmpty():是否有上傳文件
  8. void transferTo(File dest):將文件保存到一個目標文件中

Spring MVC文件上傳下載