專案遇到關於 enctype="multipart/form-data" 屬性問題。
今天再作程式時,我需要既要上傳檔案。又要獲取HIDDEN 資料。
可是本頁面總是 無法 獲取的HIDDEN資料
最後發現是 :
ENCTYPE="multipart/form-data" 引起。
如果去掉就能獲取。可是檔案就無法上傳了。。
請問大家這種問題如何解決。。。??
<HTML> <BODY BGCOLOR="white"> <H1>jspSmartUpload : Sample 1</H1> <HR> <% out.print(request.getParameter("hidden")); %> <FORM METHOD="POST" ACTION='simple.jsp' ENCTYPE="multipart/form-data"> <INPUT TYPE="FILE" NAME="FILE1" SIZE="50"><BR> <INPUT TYPE="FILE" NAME="FILE2" SIZE="50"><BR> <INPUT TYPE="FILE" NAME="FILE3" SIZE="50"><BR> <INPUT TYPE="FILE" NAME="FILE4" SIZE="50"><BR> <INPUT TYPE="SUBMIT" VALUE="Upload"> <INPUT TYPE="hidden" name='hidden' VALUE="hidden"> </FORM> </BODY> </HTML> <p class="indent"> |
含義 ENCTYPE="multipart/form-data" 說明。。:
============================
透過 http 協議上傳檔案 rfc1867協議概述,jsp 應用舉例,客戶端傳送內容構造 1、概述 在最初的 http 協議中,沒有上傳檔案方面的功能。 rfc1867 (http://www.ietf.org/rfc/rfc1867.txt) 為 http 協議新增了這個功能。客戶端的瀏覽器,如 Microsoft IE, Mozila, Opera 等,按照此規範將使用者指定的檔案傳送到伺服器。伺服器端的網頁程式,如 php, asp, jsp 等,可以按照此規範,解析出使用者傳送來的檔案。 Microsoft IE, Mozila, Opera 已經支援此協議,在網頁中使用一個特殊的 form 就可以傳送檔案。 絕大部分 http server ,包括 tomcat ,已經支援此協議,可接受傳送來的檔案。 各種網頁程式,如 php, asp, jsp 中,對於上傳檔案已經做了很好的封裝。 2、上傳檔案的例項:用 servelet 實現(http server 為 tomcat 4.1.24) 1. 在一個 html 網頁中,寫一個如下的form : <form enctype="multipart/form-data" action="http://192.168.29.65/UploadFile" method=post> load multi files :<br> <input name="userfile1" type="file"><br> <input name="userfile2" type="file"><br> <input name="userfile3" type="file"><br> <input name="userfile4" type="file"><br> text field :<input type="text" name="text" value="text"><br> <input type="submit" value="提交"><input type=reset> </form> 使用者可以選擇多個檔案,填寫表單其它項,點選“提交”按鈕後就開始上傳給 http://192.168.29.65/upload_file/UploadFile 這是一個 servelet 程式 注意 enctype="multipart/form-data", method=post, type="file" 。根據 rfc1867, 這三個屬性是必須的。multipart/form-data 是新增的編碼型別,以提高二進位制檔案的傳輸效率。具體的解釋請參閱 rfc1867 2. 服務端 servelet 的編寫 現在第三方的 http upload file 工具庫很多。Jarkata 專案本身就提供了fileupload 包http://jakarta.apache.org/commons/fileupload/ 。檔案上傳、表單項處理、效率問題基本上都考慮到了。在 struts 中就使用了這個包,不過是用 struts 的方式另行封裝了一次。這裡我們直接使用 fileupload 包。至於struts 中的用法,請參閱 struts 相關文件。 這個處理檔案上傳的 servelet 主要程式碼如下: public void doPost( HttpServletRequest request, HttpServletResponse response ) { DiskFileUpload diskFileUpload = new DiskFileUpload(); // 允許檔案最大長度 diskFileUpload.setSizeMax( 100*1024*1024 ); // 設定記憶體緩衝大小 diskFileUpload.setSizeThreshold( 4096 ); // 設定臨時目錄 diskFileUpload.setRepositoryPath( "c:/tmp" ); List fileItems = diskFileUpload.parseRequest( request ); Iterator iter = fileItems.iterator(); for( ; iter.hasNext(); ) { FileItem fileItem = (FileItem) iter.next(); if( fileItem.isFormField() ) { // 當前是一個表單項 out.println( "form field : " + fileItem.getFieldName() + ", " + fileItem.getString() ); } else { // 當前是一個上傳的檔案 String fileName = fileItem.getName(); fileItem.write( new File("c:/uploads/"+fileName) ); } } } 為簡略起見,異常處理,檔案重新命名等細節沒有寫出。 3、 客戶端傳送內容構造 假設接受檔案的網頁程式位於 http://192.168.29.65/upload_file/UploadFile. 假設我們要傳送一個二進位制檔案、一個文字框表單項、一個密碼框表單項。檔名為 E:\s ,其內容如下:(其中的XXX代表二進位制資料,如 01 02 03) a bb XXX ccc 客戶端應該向 192.168.29.65 傳送如下內容: POST /upload_file/UploadFile HTTP/1.1 Accept: text/plain, */* Accept-Language: zh-cn Host: 192.168.29.65:80 Content-Type:multipart/form-data;boundary=---------------------------7d33a816d302b6 User-Agent: Mozilla/4.0 (compatible; OpenOffice.org) Content-Length: 424 Connection: Keep-Alive -----------------------------7d33a816d302b6 Content-Disposition: form-data; name="userfile1"; filename="E:\s" Content-Type: application/octet-stream a bb XXX ccc -----------------------------7d33a816d302b6 Content-Disposition: form-data; name="text1" foo -----------------------------7d33a816d302b6 Content-Disposition: form-data; name="password1" bar -----------------------------7d33a816d302b6-- (上面有一個回車) 此內容必須一字不差,包括最後的回車。 注意:Content-Length: 424 這裡的424是紅色內容的總長度(包括最後的回車) 注意這一行: Content-Type: multipart/form-data; boundary=---------------------------7d33a816d302b6 根據 rfc1867, multipart/form-data是必須的. ---------------------------7d33a816d302b6 是分隔符,分隔多個檔案、表單項。其中33a816d302b6 是即時生成的一個數字,用以確保整個分隔符不會在檔案或表單項的內容中出現。前面的 ---------------------------7d 是 IE 特有的標誌。 Mozila 為---------------------------71 用手工傳送這個例子,在上述的 servlet 中檢驗透過。 <p class="indent"> |
相關文章
- HTTP multipart/form-data格式之檔案上傳HTTPORM
- 請問關於Struts的Indexed屬性的問題Index
- multipart form-data boundary 說明ORM
- form表單的enctype屬性的作用ORM
- PHP Multipart/form-data remote dos VulnerabilityPHPORMREM
- 關於MQTT 使用遇到問題MQQT
- 關於angular的$resource中的isArray屬性問題Angular
- PHP multipart/form-data 遠端DOS漏洞PHPORM
- vue專案建立遇到的問題Vue
- 理解HTTP協議中的multipart/form-dataHTTP協議ORM
- iOS 網路請求之multipart/form-dataiOSORM
- 關於“屬性”的幾個問題,也許面試會問到哦~面試
- 關於lnmp配置laravel專案的問題?LNMPLaravel
- 關於專案內模組引用的問題
- 關於 Laravel 遷移遇到的問題Laravel
- 關於工作中遇到的問題
- 關於操作駁回遇到的問題
- SuperObject Delphi 的 JSON 屬性亂序 – 操作類改造 – 關於屬性順序的問題ObjectJSON
- 實際專案中遇到的問題
- 【專案中遇到的zookeeper的問題】
- vue-resource傳送multipart/form-data資料VueORM
- 關於UINavigationBar和UITabBar的translucent屬性的問題UINavigationtabBar
- 關於vuejs的偵聽屬性watch的三個問題VueJS
- 關於網站專案報價的問題網站
- 關於idea部署本地專案的問題Idea
- 關於struts開發時遇到的問題
- form標籤的enctype屬性的作用簡單介紹ORM
- vue專案中遇到的問題總結Vue
- pipenv + 離線移植專案 遇到的問題
- 關於unity專案匯出iOS工程的問題UnityiOS
- 關於整合SSH,重新發布專案的問題
- 關於ubuntu安裝中過程遇到問題Ubuntu
- 個人專案相關問題
- 關於vue的使用計算屬性VS使用計算方法的問題Vue
- Pycharm匯入python專案遇到的問題PyCharmPython
- 從零開始實現multipart/form-data資料提交ORM
- Netcore webapi + 後端多檔案多引數 multipart/form-data 上傳NetCoreWebAPI後端ORM
- 轉賬問題是屬於業務問題還是屬於技術問題?