淡泊明志,寧靜致遠

          轉發:同事寫的HTTP上傳文件

          有關Java中使用FTP上傳文件,之前我有發過郵件
          現在說一下“HTTP文件上傳”,也就是在網頁中向WWW服務器上傳文件
           
          要實現HTTP文件上傳,我們必須先了解上傳文件的HTTP請求。
          我做了個簡單的程序示范了把HTTP請求的原始數據寫入文件以及如何上傳文件。
          用文本編輯器查看該文件即可了解請求的格式
          在此基礎上我們就可以提取出上傳文件的名字、文件內容以及原本混合在一起的其他信息。
           
          up.jsp頁面提供一個表單,可以從這里輸入一般數據和選擇文件并把文件上傳到服務器。
          up.jsp程序可以放在OC4J下的任意項目下運行
           
          注意,<form>標記有一個enctype屬性,屬性值是"MULTIPART/FORM-DATA"。
          "MULTIPART/FORM-DATA"是多段數據提交格式,就是說提交的數據不單是字符文本數據
          還包括其他比如文件的數據,當提交文件數據時必須要指定這個屬性
          但用了這個屬性之后我們將不能用普通的request.getParameter()來取表單數據
          必須要用另外的方式來解析"MULTIPART/FORM-DATA"型的數據
           
          頁面還有個type為file的Input是用來選擇上傳文件的。
           
          up.jsp中的doUpload()方法把request對象的表單原始數據寫入D:\test.txt文件.
          doUpload()方法如下
          <%!
          public void doUpload(HttpServletRequest request) throws IOException
          {
           PrintWriter pw = new PrintWriter( new BufferedWriter(new FileWriter("D:\\test.txt")));
           ServletInputStream in = request.getInputStream();
           
           int i = in.read();
           while (i != -1)
           {
            pw.print((char) i);
            i = in.read();
           }
           pw.close();
          }
          %>
          選擇上傳一個文本或者其他文件。點擊“提交”按鈕之后,表單就提交了,一起提交的還有上傳的文件。
          提交之后會生成一個D:\test.txt文件。
          打開test.txt文件,我們可以看到上傳文件的內容和一些上傳的信息了。
           
          test.txt文件示例:
          -----------------------------7d63e71a403a6
          Content-Disposition: form-data; name="company"
           
          XX
          -----------------------------7d63e71a403a6
          Content-Disposition: form-data; name="filename"; filename="D:\Temp\TestFile.txt"
          Content-Type: text/plain
           
          http://211.155.27.112/bbs/showthread.php?s=&threadid=67680
          http://www.newhua.com/cfan/200415/usbsetup.rar
          liuhui814@tom.com
          http://www.zarvadigital.com/eiss/index.jsp
           ?????????ì!~????±????ü??.
          ??????????????????????~!!!!
          -----------------------------7d63e71a403a6--
           
          test.txt文件中出現亂碼是沒有處理中文的緣故
           
          從test.txt文件中我們可以看出
          提交的數據以“-----------------------------7d63e71a403a6”形式來分隔
          下面列出關于數據的格式和name,等等的一些屬性
          數據的Content-Type屬性沒有的話表示普通的字符串數據,如"company"=XX
          數據的Content-Type屬性為text/plain則表示格式為文本文件格式,其filename屬性是文件的文件名
          當然如果上傳的是圖片的話,Content-Type屬性就是image/gif或者image/jpg
           
          從以上我們可以看出,通過解析test.txt(也就是request流數據)中的數據,就可以提取出我們所需要的數據
          把提取出來的數據保存到相應文件,我們就可以實現HTTP的文件上傳
           
          事實上現在有很多第三方的uploadfile組件,都是利用這個原理來實現HTTP文件上傳
          相信了解了HTTP文件上傳的原理,大家會在理解文件上傳方面有一定的幫助
          在以后要用到HTTP文件上傳功能的地方,就算用的是第三方的類庫
          也能夠做到知其然,知其所以然``


          PS:請將form的METHOD改用post傳送,用request如果文件太大,會丟失內容.

          posted on 2006-03-14 09:29 淡泊明志,寧靜致遠 閱讀(6247) 評論(4)  編輯  收藏

          評論

          # re: 轉發:同事寫的HTTP上傳文件 2006-03-14 17:17 temp

          新能科技的兄弟??  回復  更多評論   

          # re: 轉發:同事寫的HTTP上傳文件 2006-03-14 17:44 淡泊明志,寧靜致遠

          @temp
          也算是吧,不過在大陸不叫新能,你是新能的??  回復  更多評論   

          # re: 轉發:同事寫的HTTP上傳文件 2012-01-18 11:18 fantasy

          用request如果文件太大,會丟失內容?不用request用什么?  回復  更多評論   

          # 上傳中國夢我的夢 2013-09-21 19:39 萬言論語

          今天,我是中國人啦!我有著黃皮膚黑色眼睛,青春很短暫,但是我在這個大家庭里我有著一個夢那就是希望全球都變得干干凈凈,人們不在亂扔垃圾小河變得清澈見底,水中的魚兒游來游去,空氣中的花香人心脾..…. 為了實現這個夢想 我變從身邊做起,每當身邊,有垃圾時,我會主動彎腰撿起它不僅在學校這樣,而且在公共產和也一樣。我相信,只要全球l3億人都主動彎腰撿起垃,地球就全會變得更加得美麗……我愛自己得祖國,因為他美麗富饒,更因為我有一顆中國心!這就是我的夢!  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 泊头市| 蓬安县| 宁国市| 岫岩| 天台县| 三都| 措美县| 耿马| 洪泽县| 茶陵县| 钟山县| 贡嘎县| 东乡族自治县| 启东市| 焦作市| 东丰县| 忻州市| 广西| 盐山县| 长顺县| 沂源县| 绥芬河市| 南乐县| 枞阳县| 霍林郭勒市| 鄂托克旗| 墨玉县| 高安市| 罗甸县| 甘肃省| 台州市| 北流市| 武邑县| 南昌县| 河池市| 宁河县| 宝坻区| 永吉县| 唐山市| 根河市| 伊宁县|