一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

通過 http 協(xié)議上傳文件

 Ralf_Jones 2007-05-21
               
1、概述
在最初的 http 協(xié)議中,沒有上傳文件方面的功能。 rfc1867 (http://www./rfc/rfc1867.txt) 為 http 協(xié)議添加了這個功能??蛻舳说臑g覽器,如 Microsoft IE, Mozila, Opera 等,按照此規(guī)范將用戶指定的文件發(fā)送到服務(wù)器。服務(wù)器端的網(wǎng)頁程序,如 php, asp, jsp 等,可以按照此規(guī)范,解析出用戶發(fā)送來的文件。
Microsoft IE, Mozila, Opera 已經(jīng)支持此協(xié)議,在網(wǎng)頁中使用一個特殊的 form 就可以發(fā)送文件。
絕大部分 http server ,包括 tomcat ,已經(jīng)支持此協(xié)議,可接受發(fā)送來的文件。
各種網(wǎng)頁程序,如 php, asp, jsp 中,對于上傳文件已經(jīng)做了很好的封裝。
2、上傳文件的實例:用 servelet 實現(xiàn)(http server 為 tomcat 4.1.24)
1. 在一個 html 網(wǎng)頁中,寫一個如下的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>
2. 服務(wù)端 servelet 的編寫
現(xiàn)在第三方的 http upload file 工具庫很多。Jarkata 項目本身就提供了fileupload 包
http://jakarta./commons/fileupload/ 。文件上傳、表單項處理、效率問題基本上都考慮到了。在 struts 中就使用了這個包,不過是用 struts 的方式另行封裝了一次。這里我們直接使用 fileupload 包。至于struts 中的用法,請參閱 struts 相關(guān)文檔。
這個處理文件上傳的 servelet 主要代碼如下:
public void doPost( HttpServletRequest request, HttpServletResponse response ) {
    DiskFileUpload diskFileUpload = new DiskFileUpload();
    // 允許文件最大長度
    diskFileUpload.setSizeMax( 100*1024*1024 );
    // 設(shè)置內(nèi)存緩沖大小
    diskFileUpload.setSizeThreshold( 4096 );
    // 設(shè)置臨時目錄
    diskFileUpload.setRepositoryPath( "c:/tmp" );
 
    List fileItems = diskFileUpload.parseRequest( request );
    Iterator iter = fileItems.iterator();
    for( ; iter.hasNext(); ) {
        FileItem fileItem = (FileItem) iter.next();
        if( fileItem.isFormField() ) {
            // 當(dāng)前是一個表單項
            out.println( "form field : " + fileItem.getFieldName() + ", " + fileItem.getString() );
        } else {
            // 當(dāng)前是一個上傳的文件
            String fileName = fileItem.getName();
            fileItem.write( new File("c:/uploads/"+fileName) );
        }
    }
}
 
為簡略起見,異常處理,文件重命名等細(xì)節(jié)沒有寫出。
3、 客戶端發(fā)送內(nèi)容構(gòu)造
假設(shè)接受文件的網(wǎng)頁程序位于 http://192.168.29.65/upload_file/UploadFile.
假設(shè)我們要發(fā)送一個二進制文件、一個文本框表單項、一個密碼框表單項。文件名為 E:\s ,其內(nèi)容如下:(其中的XXX代表二進制數(shù)據(jù),如 01 02 03)
a
bb
XXX
ccc
 
客戶端應(yīng)該向 192.168.29.65 發(fā)送如下內(nèi)容:
 
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--
 
此內(nèi)容必須一字不差,包括最后的回車。
注意:Content-Length: 424 這里的424是紅色內(nèi)容的總長度(包括最后的回車)
注意這一行:
Content-Type: multipart/form-data; boundary=---------------------------7d33a816d302b6
根據(jù) rfc1867, multipart/form-data是必須的.
---------------------------7d33a816d302b6 是分隔符,分隔多個文件、表單項。其中33a816d302b6 是即時生成的一個數(shù)字,用以確保整個分隔符不會在文件或表單項的內(nèi)容中出現(xiàn)。前面的 ---------------------------7d 是 IE 特有的標(biāo)志。 Mozila 為---------------------------71
用手工發(fā)送這個例子,在上述的 servlet 中檢驗通過。
(上面有一個回車)
用戶可以選擇多個文件,填寫表單其它項,點擊“提交”按鈕后就開始上傳給 http://192.168.29.65/upload_file/UploadFile 這是一個 servelet 程序
注意 enctype="multipart/form-data", method=post, type="file" 。根據(jù) rfc1867, 這三個屬性是必須的。multipart/form-data 是新增的編碼類型,以提高二進制文件的傳輸效率。具體的解釋請參閱 rfc1867

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本人妻免费一区二区三区| 激情五月综五月综合网| 国产精品一区二区三区欧美| 偷拍偷窥女厕一区二区视频| 九九热视频网在线观看| 色哟哟国产精品免费视频| 国产视频一区二区三区四区| 国产欧美韩日一区二区三区| 老司机精品视频在线免费| 日韩国产传媒在线精品| 色哟哟哟在线观看视频| 久久精品a毛片看国产成人| 色婷婷成人精品综合一区| 亚洲中文字幕熟女丝袜久久| 丝袜美女诱惑在线观看| 亚洲欧美国产精品一区二区| 亚洲日本加勒比在线播放| 精品丝袜一区二区三区性色| 免费观看一级欧美大片| 内用黄老外示儒术出处| 亚洲av又爽又色又色| 六月丁香六月综合缴情| 欧美亚洲综合另类色妞| 欧美成人高清在线播放| 国产精品激情在线观看| 精品推荐国产麻豆剧传媒| 九九热精品视频在线观看| 欧美一区二区三区视频区| 午夜精品福利视频观看| 亚洲精品成人福利在线| 国产精品福利一级久久| 日本加勒比在线观看不卡| 日本和亚洲的香蕉视频| 日韩一区二区免费在线观看| 初尝人妻少妇中文字幕在线| 日韩欧美国产亚洲一区| 欧美一区二区口爆吞精| 亚洲精品黄色片中文字幕| 精品亚洲香蕉久久综合网| 日韩欧美国产精品中文字幕| 欧美日韩国内一区二区|