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

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

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

1、排查緣由所在web

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;spring

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

 

2、問題解決app

回顧了以前解決問題的經驗,肯定緣由在於表單沒有添加 enctype="multipart/form-data"post

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

 

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

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

 

3、表單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請求的正文內容
相關文章
相關標籤/搜索