為什麼上傳檔案的表單裡面要加一個屬性enctype=multipart/form-data?
1、application/x-www-form-urlencoded
2、multipart/form-data
3、text/plain
其中application/x-www-form-urlencoded是預設值,作用是設定表單傳輸的編碼。例如我們在AJAX中見過xmlHttp.setRequestHeader("Content-Type","application/x-www-form- urlencoded");如果不寫會報錯的,但是在html的form表單裡是可以不寫enctype=application/x-www-form-urlencoded,因為預設的HTML表單就是這種傳輸編碼型別的。
而multipart/form-data是用來制定傳輸資料的特殊型別的,主要就是我們上傳的非文字的內容,比如圖片或是是mp3等等。
text/plain是純文字傳輸的意思,在發郵件的時候要設定這種編碼型別,否則會出現接收時編碼混亂的問題。網路上經常拿text/plain和 text/html做比較,其實這兩個很好區分,前者用來傳輸純文字檔案,後者則是傳遞html程式碼的編碼型別,在傳送標頭檔案時才用得上。①和③都不能用於上傳檔案,只有multipart/form-data才能完整的傳遞檔案資料
上面提到的MIME,它的英文全稱是"Multipurpose Internet Mail Extensions" 多功能Internet 郵件擴充服務,它是一種多用途網際郵件擴充協議,在1992年最早應用於電子郵件系統,但後來也應用到瀏覽器。伺服器會將它們傳送的多媒體資料的型別告訴瀏覽器,而通知手段就是說明該多媒體資料的MIME型別,從而讓瀏覽器知道接收到的資訊哪些是MP3檔案,哪些是Shockwave檔案等等。伺服器將 MIME標誌符放入傳送的資料中來告訴瀏覽器使用哪種外掛讀取相關檔案。
簡單說,MIME型別就是設定某種副檔名的檔案用一種應用程式來開啟的方式型別,當該副檔名檔案被訪問的時候,瀏覽器會自動使用指定應用程式來開啟。多用於指定一些客戶端自定義的檔名,以及一些媒體檔案開啟方式。
瀏覽器接收到檔案後,會進入外掛系統進行查詢,查找出哪種外掛可以識別讀取接收到的檔案。如果瀏覽器不清楚呼叫哪種外掛系統,它可能會告訴使用者缺少某外掛,或者直接選擇某現有外掛來試圖讀取接收到的檔案,後者可能會導致系統的崩潰。傳輸的資訊中缺少MIME標識可能導致的情況很難估計,因為某些計算機系統可能不會出現什麼故障,但某些計算機可能就會因此而崩潰。
檢查一個伺服器是否正確設定了MIME型別的步驟是:
1. 在Netscape瀏覽器中開啟伺服器網頁
2. 進入"View"選單,選擇"Page Info"
3. 在彈出的視窗中點選上層框架中的"EMBED"
4. 在下層框架中檢視MIME的型別是否為"application/x-director"或"application/x-shockwave- flash",如果是上述資訊的話表明伺服器已經正確設定了MIME型別;而如果MIME型別列出的是文字內容、八位一組的資料或是其它形式均表明伺服器的MIME型別沒有設定正確。
如果伺服器沒有正確標明其傳送的資料的型別,伺服器管理員應該正確新增相關資訊,具體操作方法非常簡單快捷。
每個MIME型別由兩部分組成,前面是資料的大類別,例如聲音audio、圖象image等,後面定義具體的種類。
常見的MIME型別
超文字標記語言文字 .html,.html text/html
普通文字 .txt text/plain
RTF文字 .rtf application/rtf
GIF圖形 .gif image/gif
JPEG圖形 .jpeg,.jpg image/jpeg
au聲音檔案 .au audio/basic
MIDI音樂檔案 mid,.midi audio/midi,audio/x-midi
RealAudio音樂檔案 .ra, .ram audio/x-pn-realaudio
MPEG檔案 .mpg,.mpeg video/mpeg
AVI檔案 .avi video/x-msvideo
GZIP檔案 .gz application/x-gzip
TAR檔案 .tar application/x-tar
Internet中有一個專門組織IANA來確認標準的MIME型別,但Internet發展的太快,很多應用程式等不及IANA來確認他們使用的MIME型別為標準型別。因此他們使用在類別中以x-開頭的方法標識這個類別還沒有成為標準,例如:x-gzip,x-tar等。事實上這些型別運用的很廣泛,已經成為了事實標準。只要客戶機和伺服器共同承認這個MIME型別,即使它是不標準的型別也沒有關係,客戶程式就能根據MIME型別,採用具體的處理手段來處理資料。而Web伺服器和瀏覽器(包括作業系統)中,預設都設定了標準的和常見的MIME型別,只有對於不常見的 MIME型別,才需要同時設定伺服器和客戶瀏覽器,以進行識別。
----------------------------------------------------------------
表單中enctype="multipart/form-data"的意思,是設定表單的MIME編碼。預設情況,這個編碼格式是application/x-www-form-urlencoded,不能用於檔案上傳;
只有使用了multipart/form-data,才能完整的傳遞檔案資料,進行下面的操作.enctype="multipart/form-data"是上傳二進位制資料; form裡面的input的值以2進位制的方式傳過去。
form裡面的input的值以2進位制的方式傳過去,
所以request就得不到值了。也就是說加了這段程式碼,用request就會傳遞不成功,取表單值加入資料庫時,用到下面的:
SmartUpload su = new SmartUpload();//新建一個SmartUpload物件
su.getRequest().getParameterValues();取陣列值
su.getRequest().getParameter( );取單個引數單個值
原文地址:
http://www.cnblogs.com/YOUCAN/archive/2012/12/02/2798227.html
相關推薦
為什麼上傳檔案的表單裡面要加一個屬性enctype=multipart/form-data?
首先知道enctype這個屬性管理的是表單的MIME編碼。共有三個值可選: 1、application/x-www-form-urlencoded 2、multipart/form-data 3、text/plain 其中application/x-www-form-url
為什麼上傳檔案的表單裡要加個屬性 enctype
上傳檔案的表單中<form>要加屬性enctype="multipart/form-data",很多人只是死記硬背知道上傳表單要這麼 寫,知其然而不知其所以然。那到底為什麼要新增這個屬性呢?它是什麼意思呢?它又有什麼其他可選值呢? 其實form表單在你不寫enc
檔案上傳下載時,在form表單中設定屬性enctype=“multipart/form-data”的情況下,如何獲取表單提交的值?
一、問題描述 檔案上傳下載時,在form表單中設定屬性enctype=“multipart/form-data”的情況下,如何獲取表單提交的有關使用者資訊的值?(比如:textfield、radio等屬性中的值) 二、解決方法 1、情況一:沒有對user物件進行封裝 方法:
關於使用設定表單屬性enctype="multipart/form-data"之後傳值問題
今天做一個簡單的商城專案的時候碰到了一個問題,將前臺頁面傳過來的引數直接想當然的使用BeanUtils的populate封裝進了bean,去資料庫看發現只有自己給bean設定的值,前臺傳的一個都沒有儲存進去.查了資料發現,使用了multipart/form-data之後,表單
普通檔案的上傳(表單上傳和ajax檔案非同步上傳)
一.表單上傳: html客戶端部分: <form action="upload.ashx" method="post" enctype="multipart/form-data"> 選擇檔案:<input type="file" name="file1" /><br /
HttpClient4模擬帶檔案上傳的表單提交
這裡用apache的HttpClient4.3模擬檔案上傳,上傳到一個java servlet,然後用servlet解析,把上傳檔案放到伺服器目錄下 下面這個java應用,往一個java servlet中提交了一個檔案,和幾個普通表單屬性 package com.tes
js檔案上傳以及表單提交
原理: 使用 FormData物件,將要傳送給後臺的資料 都 append該物件中,包括檔案,最後將這個物件傳送給後臺。<!doctype html><html lang="zh"><head> <meta charset
nodejs使用multer中介軟體上傳混合表單提交(檔案和非檔案普通文字域)
我的一個表單包括幾個input(type=’text’)普通的文字域和input(type=’file’),兩者同屬一個表單,form設定enctype=’multipart/form-data’。需要混合上傳,savePoster是儲存檔案邏輯,save是儲存
SpringBoot+Ajax檔案上傳+FormData表單提交
需求 前端: html定義好form表單的輸入資訊(text+file)標籤 js通過Ajax非同步提交表單中的內容。 後端: 通過介面接收表單中的資料(String+MultipartFil
為什麼上傳檔案的表單需要設定enctype="multipart/form-data"
在學習PHP檔案上傳的過程中發現,HTML表單需要設定enctype="multipart/form-data"這個屬性,雖然不這麼設定的確無法上傳,但這是為什麼呢? HTML表單如何打包資料檔案是由enctype這個屬性決定的。enctype有以下幾種取值:
使用okhttp3實現多檔案上傳及表單資料一起上傳
1 建立okhttpClient 程式碼如下,上傳檔案設定超時時間30s OkHttpClient client = new OkHttpClient.Builder() .writeTimeout(3
檔案上傳型別表單不能提交的問題
表單定義如下: <form class="form-horizontal form-bordered" action="admin/home/testUpload.json" method="POST" enctype="multipart/form-data">
SpringMVC中檔案上傳,新增enctype="multipart/form-data"後表單其他屬性為空
最近在做一個小型專案,用SpringMVC+Spring+Mybatis做的,開始沒有做圖片上傳,也沒有用Spring MVC做過,以前是用Struts2搞定的,所以很自然的, 在設定form表單上的屬性就用了enctype=”multipart/form-da
上傳檔案form表單enctype="multipart/form-data"傳值解決辦法(代原始碼)
四個檔案原始碼分別為: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://ww
文件的上傳對表單的要求
ont exceptio isf file NPU 類型 reg 內容類型 ram <!-- 上傳文件:表單要求 1,enctype="multipart/form-data" 2.表單中需要有type="file"的input 3.表單的請求方式一定是POST。
關於QThttp post上傳混合表單資料例項總結
最近使用QT做一個應用,需要使用一下幾個庫模擬http表單上傳。走了很多彎路,經過很多次實驗抓包之後,終於可以上傳成功了。 #include "QNetworkAccessManager" #include "QUrl" #include "QHttpMultiPart" #incl
Ajax使用formData提交帶圖片上傳的表單
記錄一下今天踩過的坑。。這麼個問題居然搞了快兩個小時了。ssm框架,前臺form帶圖片上傳,因為效驗表單資料,所以不能直接submit。 formDat還是很簡單的,有很多加值得方法,後臺可以直接用物件接收。 使用ajax提交有很多種方式,說一下使用formDat,直接貼程式碼。 前
ajax非同步請求提交上傳圖片表單並預覽圖片
一、表單上傳檔案必須加上enctype="multipart/form-data",(以下是上傳檔案的表單) <form action="<%=basePath%>UploadImage" method="post" id="uploadForm" en
easyUI帶上傳的表單提交
jsp頁面 表單 <tr> <td><label>播放形式:</label></td> <td><input name="pattern" type="radio" cl
xUtils上傳檔案使用表單的方式上傳檔案。
專案中需要進行上傳多張圖片,比如說,發表文章的時候最多可以上傳9張圖片。 List<File> filelist = new ArrayList<File>(); for (int i = 0; i < filePath.length; i+