今天在寫文件上傳的時候,出現了
原因是表格的提交沒有添加請求的方式,只能寫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="上傳">
-
二、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 ---空格轉換為 “+” 加號,但不對特殊字符編碼。