日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

application/x-www-form-urlencoded 与multipart/form-data

發布時間:2023/12/9 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 application/x-www-form-urlencoded 与multipart/form-data 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么上傳文件的表單里要加個屬性 enctype

上傳文件的表單中<form>要加屬性enctype="multipart/form-data",很多人只是死記硬背知道上傳表單要這么寫,知其然而不知其所以然。那到底為什么要添加這個屬性呢?它是什么意思呢?它又有什么其他可選值呢?其實form表單在你不寫enctype屬性時,也默認為其添加了enctype屬性值,默認值是enctype="application/x- www-form-urlencoded".這個屬性管理的是表單的MIME編碼,共有三個值可選:

①application/x-www-form-urlencoded (默認值)

②multipart/form-data

③text/plain

其中①application/x-www-form-urlencoded是默認值,大家可能在AJAX里見過這個:xmlHttp.setRequestHeader("Content-Type","application/x-www-form- urlencoded"); 這兩個要做的是同一件事情,就是設置表單傳輸的編碼。在AJAX里不寫有可能會報錯,但是在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( );取單個參數單個值

總結

以上是生活随笔為你收集整理的application/x-www-form-urlencoded 与multipart/form-data的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。