為什麼上傳檔案的表單裡面要加一個屬性enctype=multipart/form-data?

來源:互聯網
上載者:User

標籤:request   rtu   http   XML   標準   url   添加   dir   web   

首Crowdsourced Security Testing道enctype這個屬性管理的是表單的MIME編碼。共有三個值可選:
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,.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( );取單個參數單個值

為什麼上傳檔案的表單裡面要加一個屬性enctype=multipart/form-data?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.