Cannot convert value of type 'java.lang.String' to required type 'org.springframework.web.multipart.commons.CommonsMultipartFile': no matching editors or conversion strategy found


今天在寫文件上傳的時候,出現了

 

 原因是表格的提交沒有添加請求的方式,只能寫post方法,我用了get方法,也不對。

因為:

    1.多部分(enctype="multipart/form-data")表單
    2.請求必須是post請求,因為post可以傳二進制和文本
因為get請求文件只支持2k-4k左右且只能傳文本,不能傳二進制,所有不能用get方法。

 

 

 

一、問題解決

今天寫Spring MVC的圖片上傳的時候遇見的問題

問題和解決辦法都已經寫在標題上了,當運行項目上傳照片的時候出現這個錯誤,百度許多也沒有找到解決辦法,后來才發現是在寫上傳文件的jsp文件時寫錯了一個標簽屬性,這個標簽就是enctype了,當用表單傳值的時候必須將enctype設置為"multipart/form-data"

因為如果不設置則默認為為application/x-www-form-urlencoded,但這個屬性用於上傳文本格式的文件,但如果是上傳圖片這類資源就會出現和我一樣的錯誤啦,所以就必須將enctype設置為"multipart/form-data",這個設置可將需要的資源以二進制的形式上傳,這樣可以實現圖片上傳了。

修改后的代碼如下

  1.  
    <h1>圖片上傳</h1>
  2.  
    <form action= "file" method="post" enctype="multipart/form-data">
  3.  
    文件:<input type= "file" name="file"><br>
  4.  
    描述:<input name= "desc"><br>
  5.  
    <input type= "submit" value="上傳">
  6.  
    </form>

二、enctype詳解

enctype這個屬性管理的是表單的MIME(Multipurpose Internet Mail Extensions)編碼,共有三個值可選:
1、application/x-www-form-urlencoded     ---在發送前編碼所有字符(默認)(空格被編碼為’+’,特殊字符被編碼為ASCII十六進制字符),作用是設置表單傳輸的編碼,多用於文本上傳。

 eg: AJAX中xmlHttp.setRequestHeader("Content-Type","application/x-www-form- urlencoded"),不寫會報錯的,form表單里是可以不寫enctype=application/x-www-form-urlencoded,因為默認HTML表單就是這種傳輸編碼類型
2、multipart/form-data ---不對字符編碼。在使用包含文件上傳控件的表單時,必須使用該值。制定傳輸數據的特殊類型,上傳的非文本的內容,比如圖片或是是mp3,也要使用該值,但在form表單用request是無法直接獲取到相應表單的值。
3、text/plain ---空格轉換為 “+” 加號,但不對特殊字符編碼。


免責聲明!

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



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