淡泊明志,寧靜致遠(yuǎn)

          轉(zhuǎn)發(fā):同事寫的HTTP上傳文件

          有關(guān)Java中使用FTP上傳文件,之前我有發(fā)過郵件
          現(xiàn)在說一下“HTTP文件上傳”,也就是在網(wǎng)頁中向WWW服務(wù)器上傳文件
           
          要實現(xiàn)HTTP文件上傳,我們必須先了解上傳文件的HTTP請求。
          我做了個簡單的程序示范了把HTTP請求的原始數(shù)據(jù)寫入文件以及如何上傳文件。
          用文本編輯器查看該文件即可了解請求的格式
          在此基礎(chǔ)上我們就可以提取出上傳文件的名字、文件內(nèi)容以及原本混合在一起的其他信息。
           
          up.jsp頁面提供一個表單,可以從這里輸入一般數(shù)據(jù)和選擇文件并把文件上傳到服務(wù)器。
          up.jsp程序可以放在OC4J下的任意項目下運行
           
          注意,<form>標(biāo)記有一個enctype屬性,屬性值是"MULTIPART/FORM-DATA"。
          "MULTIPART/FORM-DATA"是多段數(shù)據(jù)提交格式,就是說提交的數(shù)據(jù)不單是字符文本數(shù)據(jù)
          還包括其他比如文件的數(shù)據(jù),當(dāng)提交文件數(shù)據(jù)時必須要指定這個屬性
          但用了這個屬性之后我們將不能用普通的request.getParameter()來取表單數(shù)據(jù)
          必須要用另外的方式來解析"MULTIPART/FORM-DATA"型的數(shù)據(jù)
           
          頁面還有個type為file的Input是用來選擇上傳文件的。
           
          up.jsp中的doUpload()方法把request對象的表單原始數(shù)據(jù)寫入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文件,我們可以看到上傳文件的內(nèi)容和一些上傳的信息了。
           
          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文件中出現(xiàn)亂碼是沒有處理中文的緣故
           
          從test.txt文件中我們可以看出
          提交的數(shù)據(jù)以“-----------------------------7d63e71a403a6”形式來分隔
          下面列出關(guān)于數(shù)據(jù)的格式和name,等等的一些屬性
          數(shù)據(jù)的Content-Type屬性沒有的話表示普通的字符串?dāng)?shù)據(jù),如"company"=XX
          數(shù)據(jù)的Content-Type屬性為text/plain則表示格式為文本文件格式,其filename屬性是文件的文件名
          當(dāng)然如果上傳的是圖片的話,Content-Type屬性就是image/gif或者image/jpg
           
          從以上我們可以看出,通過解析test.txt(也就是request流數(shù)據(jù))中的數(shù)據(jù),就可以提取出我們所需要的數(shù)據(jù)
          把提取出來的數(shù)據(jù)保存到相應(yīng)文件,我們就可以實現(xiàn)HTTP的文件上傳
           
          事實上現(xiàn)在有很多第三方的uploadfile組件,都是利用這個原理來實現(xiàn)HTTP文件上傳
          相信了解了HTTP文件上傳的原理,大家會在理解文件上傳方面有一定的幫助
          在以后要用到HTTP文件上傳功能的地方,就算用的是第三方的類庫
          也能夠做到知其然,知其所以然``


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

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

          評論

          # re: 轉(zhuǎn)發(fā):同事寫的HTTP上傳文件 2006-03-14 17:17 temp

          新能科技的兄弟??  回復(fù)  更多評論   

          # re: 轉(zhuǎn)發(fā):同事寫的HTTP上傳文件 2006-03-14 17:44 淡泊明志,寧靜致遠(yuǎn)

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

          # re: 轉(zhuǎn)發(fā):同事寫的HTTP上傳文件 2012-01-18 11:18 fantasy

          用request如果文件太大,會丟失內(nèi)容?不用request用什么?  回復(fù)  更多評論   

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

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 新蔡县| 扶绥县| 安仁县| 九台市| 化州市| 淳安县| 犍为县| 如皋市| 南乐县| 英德市| 陇川县| 靖远县| 武宁县| 黔江区| 云阳县| 西昌市| 宝兴县| 北碚区| 成都市| 扶沟县| 南昌市| 宜章县| 抚州市| 滁州市| 偏关县| 龙里县| 札达县| 即墨市| 建湖县| 拜城县| 秭归县| 舒兰市| 安仁县| 蒲城县| 安远县| 三台县| 华宁县| 游戏| 上犹县| 新密市| 洛阳市|