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",這個設定可將需要的資源以二進位制的形式上傳,這樣可以實現圖片上傳了。
修改後的程式碼如下
- <h1>圖片上傳</h1>
- <form action="file" method="post" enctype="multipart/form-data">
-
檔案:<input type="file" name="file"><br>
- 描述:<input name="desc"><br>
- <input type="submit" value="上傳">
- </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 ---空格轉換為 “+” 加號,但不對特殊字元編碼。