HttpServletRequest對象cast(造型、類型轉換)MultipartHttpServletRequest錯誤


最近在項目中上傳文件時又出現了常見的異常信息:

java.lang.ClassCastException: net.bull.javamelody.JspWrapper$HttpRequestWrapper3 cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest

一、排查原因所在

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

對象request是HttpServletRequest的對象,提示了造型cast失敗。

 

二、問題解決

回顧了之前解決問題的經驗,確定原因在於表單沒有添加 enctype="multipart/form-data"

 
我們如要使用springmvc的MultipartFile接收前端頁面上傳,需要表單設置屬性 enctype="multipart/form-data"。

 

表單中enctype="multipart/form-data"的意思,是設置表單的MIME編碼。

默認情況,這個編碼格式是application/x-www-form-urlencoded,不能用於文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數據,進行下面的操作。

 

三、表單enctype屬性

HTML表單如何打包數據文件是由enctype這個屬性決定的。enctype有以下幾種取值:

  • application/x-www-form-urlencoded在發送前編碼所有字符(默認)(空格被編碼為’+’,特殊字符被編碼為ASCII十六進制字符)
  • multipart/form-data 不對字符編碼。在使用包含文件上傳控件的表單時,必須使用該值。
  • text/plain 空格轉換為 “+” 加號,但不對特殊字符編碼。

默認enctype=application/x-www-form-urlencoded,所以表單的內容會按URL規則編碼,然后根據表單的提交方法:

  • method=’get’ 編碼后的表單內容附加在請求連接后
  • method=’post’ 編碼后的表單內容作為post請求的正文內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM