1. 程式人生 > 其它 >FileUpload、SpringMVC獲取multipart/form-data文字型別獲取文字域

FileUpload、SpringMVC獲取multipart/form-data文字型別獲取文字域

技術標籤:JavaWebpost

FileUpload、SpringMVC獲取multipart/form-data文字型別獲取文字域

剛學習完SpringMVCCommonsMultipartResolver檔案解析器,因為視訊上只講了單一的上傳檔案, 作為菜雞的為突發奇想:在前端開發過程中肯定有不少的表單或者非同步請求中即包含檔案也包含文字域, 在APP中的修改資訊中就是最常見的例子, 即有修改的照片、姓名、地址… 如果,檔案作檔案傳送, 文字作文字傳送, 很顯然這樣做法有時候j就是浪費伺服器的資源

FileUpload簡單實現檔案獲取和文字獲取

  • 相關api查文件, 一般都是見名知意即可
  • 如果使用的SpringMVC一定要在配置檔案中關閉檔案解析器它會攔截multipart/form-data請求
    <!--檔案解析器-->
    <!--<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxInMemorySize" value="1000000" />
    </bean>-->
  • Java程式碼:
  @RequestMapping("/testFileUploadOld")
  public String testFileUploadOld() throws Exception {
    DiskFileItemFactory factory = new DiskFileItemFactory();
    FileUpload fileUpload = new FileUpload(factory);
    // 獲取multipart/form-data所有內容
    List<FileItem> fileItems = fileUpload.
parseRequest(request); for (FileItem item: fileItems) { if (!item.isFormField()) { // 是檔案型別就執行 System.out.println(item); continue; } // 列印文字域的value System.out.println(item.getString()); } return "success"; }
  • form表單:
<form action="user/testFileUploadOld" method="POST" enctype="multipart/form-data">
     上傳檔案: <input type="file" name="uploadFile">
     姓名: <input type="text" name="name">
     年齡: <input type="text" name="age">
     <input type="submit" value="提交">
 </form>
 <br>
  • 輸出:
    在這裡插入圖片描述
  • 小提示:無法用multipart/form-data獲取,因為這不是application/x-www-form-urlencoded

SpringMVC簡單實現檔案獲取和文字獲取

  • 表單:
<form action="user/testUploadSpringMVC" method="POST" enctype="multipart/form-data" >
    SpringMVC上傳檔案: <input type="file" name="uploadFile" multiple />
    姓名: <input type="text" name="name">
    <input type="submit" value="提交">
</form>
  • 配置檔案解析器
<!--檔案解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxInMemorySize" value="1000000" />
    </bean>
  • Java實現
  @RequestMapping("/testUploadSpringMVC")
  public String testUploadSpringMVC(HttpServletRequest request,
                                    MultipartFile[] uploadFile,
                                    @RequestParam("name") String name
                                    )
          throws IOException {
    System.out.println("request獲取name: " + request.getParameter("name"));
    System.out.println("註解獲取name:" + name);
    for (MultipartFile mf: uploadFile) { // 如果一次性選擇多個檔案迭代檔案
      System.out.println(mf.getOriginalFilename()); // 列印檔名
    }
    return "success";
  }
  • 本著猜想:檔案解析器的加入能否將檔案和文字域分離的原則的結果:發現可以通過request獲取引數
    在這裡插入圖片描述
是否因為加入了SpringMVC的檔案解析器, 從而將文字域和檔案分離
  • 由於檔案解析器會攔截multipart/form-data型別中的檔案,所以我們肯定無法獲取到檔案,但是如果我們此時用request.getParameter()能否獲取?
  • 配置檔案解析器
  • 表單:
<form action="user/testFileUploadOld" method="POST" enctype="multipart/form-data">
        上傳檔案: <input type="file" name="uploadFile">
        姓名: <input type="text" name="name">
        年齡: <input type="text" name="age">
        <input type="submit" value="提交">
    </form>
  • Java實現:
@RequestMapping("/testFileUploadOld")
  public String testFileUploadOld(
                                  HttpServletRequest request
  ) throws Exception {
    	System.out.println(request.getParameter("name"));
    return "success";
  }
  • 結果:
    在這裡插入圖片描述
  • 所以猜想是正確的的, SpringMVC的檔案解析器會攔截檔案但是會分離普通的文字域。

實力很弱的小菜雞的記錄猜想。