1. 程式人生 > 實用技巧 >Cannot convert value of type 'java.lang.String' to required type 'org.springframework.web.multipart.commons.CommonsMultipartFile': no matching editors or conversion strategy found

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 ---空格轉換為 “+” 加號,但不對特殊字元編碼。