婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > JavaBean實現多文件上傳的兩種方法

JavaBean實現多文件上傳的兩種方法

熱門標簽:怎樣把地圖標注出來 黃石智能營銷電銷機器人效果 騰訊地圖標注商戶改名注冊入駐 開封便宜外呼系統報價 地圖標注人員兼職 電話機器人的特色和創新 漯河辦理400電話 商丘百應電話機器人有沒有效果 淮南騰訊地圖標注

  摘要:本文介紹了JavaBean實現多個文件上傳的兩種方法,分別是使用http協議和ftp協議實現。首先講述了http協議傳送多個文件的基本格式和實現上傳的詳細過程,之后簡單介紹了使用ftpclient 類實現了ftp方式的上傳,最后對這兩種方法進行了比較。

  關鍵字:JavaBean 、http 、ftp 、ftpclient

  JavaBean是一種基于Java的軟件組件。JSP對于在Web 應用中集成JavaBean組件提供了完善的支持。這種支持不僅能縮短開發時間(可以直接利用經測試和可信任的已有組件,避免了重復開發),也為JSP應用帶來了更多的可伸縮性。

  文件的上傳功能在基于B/S的開發模式中非常普遍。同其他開發工具相比較,JSP對文件的上傳支持并不是很完美,它既不象ASP那樣一定需要使用組件來完成,也不像PHP那樣直接提供了文件上載的支持。JSP實現文件上傳的實現方式是這樣的:使用ServletRequest類的getInputStream()方法獲得一個客戶端向服務器發出的數據流,然后處理這個數據流,從中分析、得到文件上傳中傳遞到服務器的各個參數和數據,然后將其中的文件數據存儲為一個文件或插入到數據庫中。通常JSP頁面中不處理文件的上傳功能,而是把這些功能放到Servlet 或JavaBean中去實現。使用Servlet完成文件上傳的例子在一些JSP的相關書籍中都有所介紹,我這里介紹使用JeanBean是如何完成文件上傳的。JSP中實現文件的上傳可以采用兩種方式即采用HTTP協議和FTP協議實現,二者在傳輸的原理上存在很大的差異。以下將結合源代碼對它們的實現做簡單介紹,相信讀者會從中有所收獲。以下程序已經調試通過。調試的環境:window 2000 server+Apache +tomcat4.0,JavaBean調試環境:JDK1.4+Editplus。

  在JSP中使用JavaBean實現基于Web的文件上傳功能一般需要三種文件結合完成。這三種文件分別是提供界面的HTML頁面文件、完成調用實現上傳功能的JavaBean的JSP文件和實現JavaBean的Java的類文件。以下我將重點講述采用HTTP協議和FTP協議實現文件上傳功能的JavaBean部分。

  1 采用HTTP協議實現多個文件的上傳

  在過去的Html中,表單不能實現文件的上傳,這多少限制了一些網頁的功能。RFC1867規范(即Html中實現基于表單的文件上傳)對表單作出了擴展,增加了一個表單元素〈input type=file>。通過使用這個元素,瀏覽器會自動生成一個輸入框和一個按鈕,輸入框可供用戶填寫本地的文件名和路徑名,按鈕可以讓瀏覽器打開一個文件選擇框供用戶選擇文件。具體的表單實現如下:

FORMMETHOD="POST" ACTION="*.jsp" ENCTYPE="multipart/form-data">
INPUT TYPE="FILE" NAME="FILE1" SIZE="50">BR>
INPUT TYPE="SUBMIT" VALUE="Upload">
/FORM>

  當選擇了粘貼文件后就直接輸入本地文件的絕對路徑,表單的action屬性值是*.jsp,這意味著請求(包括上載的文件)將發送給*..jsp文件。在這個過程中實際上就實現了HTTP方式的文件上載。文件從客戶端到服務器的上載是由HTTP協議的通用網關界面(CGI)支持的。這種上載方式要求瀏覽器和WEBServer兩方面都能夠支持Rfc1867。JavaBean 通過ServletRequest類的getInputStream()方法獲得一個客戶端向服務器發出的數據流、分析上傳的文件格式,根據分析結果將多個文件依次輸出服務器端的目標文件中。本例中的JavaBeande的功能是由testUpload類具體實現。TestUpload類的框架如下:

public class testUpload
{
public testUpload(){……}
public final void initialize(ServletConfig config) throws ServletException
{ m_application = config.getServletContext(); }
public void upload() throws testUploadException, IOException, ServletException
{………}
private void getDataSection(){………}
private void getDataHeader(){………}
public int save (String destPathName)
throws SmartUploadException, IOException, ServletException
{………}
……
}

  通過initialize()方法初始化Servlet的運行環境。使用upload()方法獲得輸入流,并分析上傳文件的格式,并將各個上傳文件的屬性賦給多個File類實例處理,這些File類實例由Files類管理。File類根據各文件的屬性調用它的save ()方法將多個文件依次輸出服務器端的目標文件中。其中upload()方法是關鍵,用于分析http1.1協議傳送文件的格式。經過測試,我們得出傳輸流文件的格式,這對理解upload()方法很有用。例如,上傳我的文檔\tt.txt文件。格式如下:

//文件分隔符
-----------------------------7d226137250336
//文件信息頭
Content-Disposition: form-data; name="FILE1"; filename="C:\Documents and Settings\Administrator.TIMBER-4O6B0ZZ0\My Documents\tt.sql"
Content-Type: text/plain
//源文件內容
create table info(
content image null);
//下一個文件的分隔符
-----------------------------7d226137250336
Content-Disposition: form-data; name="FILE2"; filename=""
Content-Type: application/octet-stream
-----------------------------7d226137250336

  從以上文件我們可以看出,HTTP協議在上傳多個文件時,是將文件全部放到輸入流并以一定的分隔符來區分的。實際上upload()方法就是要分析上面的文件,確定分隔符的內容、各個文件的內容格式、文件的完整路徑名稱、及其文件的實際數據的始末位置。這里需要說明的一點是分隔符是隨機的,它是傳輸流文件的第一個回車符之前的所有字符。

  Upload()方法的實現流程是:首先將輸入流文件輸出到字節數組m_binArray中,通過下面的代碼實現。

m_totalBytes=1024;totalRead=0;
for(; totalRead m_totalBytes; totalRead += readBytes)
try
{ m_request.getInputStream();
readBytes = m_request.getInputStream().read(m_binArray, totalRead, m_totalBytes - totalRead);
}catch(Exception e){ throw new SmartUploadException("Unable to upload.");}

  這里采用了循環中多字節讀取方法,以上循環不斷地讀取數據直到數組填滿為止。如果一個文件可以完全得到,則文件的所有字節也就可以全部得到。但是因為網絡速度通常比CPU慢得多,所以程序很容易在所有的數據到來之前就清空網絡緩沖區。實際上,多字節讀取方法在試圖從暫時為空但是開放的網絡緩存區讀取數據時,該方法會返回0,這表示沒有數據存在但網絡流沒有關閉。這種情況下,單字節方法將阻止運行程序的執行,所以多字節的行為優于單字節read()方法的行為。接下來將分析字節數組m_binArray。首先找到分隔符;使用getDataHeader()方法返回文件信息頭的值,從中確定源文件的完整路徑名、源文件的擴展名和源文件文件內容格式;使用getDataSection()方法返回文件的內容數據,并記錄文件數據在字節數組中的起止位置。然后生成一個File類實例,并將文件的完整路徑名、源文件的擴展名、源文件文件內容格式和文件的內容數據的起止位置放到File類實例的屬性中。找到下一個分隔符,繼續重復上述過程,直至分析完畢。

  2 采用FTP協議實現多個文件的上傳

  FTP協議是Internet上用來傳送文件的協議,規定了Internet上文件互相傳送的標準。在java中實現這一功能是借助FtpClient類完成的。具體實現過程:首先與FTP服務器建立連接;初始化文件的傳輸方式,包括ASCII和BINARY兩種方式;將文件輸出到文件輸入流FileInputStream中;FileInputStream中的數據讀入字節數組中;字節數組中的數據寫入輸出流TelnetOutputStream(利用write方法將數據寫入到一個網絡鏈接上)。這樣和源文件同名的一個文件就復制到了服務器端。本例的JavaBean中通過connectServer()、upload()和closeConnect()三個方法完成文件上傳過程。主要實現如下:

public class ftpUpload
{ String filename;String filename1;FtpClient ftpClient;
public void connectServer(string server,string user,string password,string path)
{
//server:FTP服務器的IP地址;user:登錄FTP服務器的用戶名
//password:登錄FTP服務器的用戶名的口令;path:FTP服務器上的路徑
try{ ftpClient=new FtpClient();
ftpClient.openServer(server);
ftpClient.login(user, password);
System.out.println("login success!");
if (path.length()!=0) ftpClient.cd(path);
ftpClient.binary(); }catch (IOException ex) {System.out.println(ex);}
}
public void closeConnect()
{try{ ftpClient.closeServer();
}catch (IOException ex) {System.out.println(ex);}
}
public void upload()
{ filename1=findFileName(filename);
//從filename中分析出文件的名稱,作為目標文件的名稱,具體方法實現未給出
try {
TelnetOutputStream os=ftpClient.put(filename1);
java.io.File file_in=new java.io.File(filename);
FileInputStream is=new FileInputStream(file_in);
byte[] bytes=new byte[1024];
int c;
while ((c=is.read(bytes))!=-1){ os.write(bytes,0,c); }
is.close(); os.close();
} catch (IOException ex) {System.out.println(ex);}
}
}

  connectServer()完成與FTP服務器建立連接的功能,使用FtpClient的openServer(string server)方法打開遠程FTP服務器,然后使用FtpClient的login(user, password)方法登錄服務器。登錄遠程FTP服務器有兩種方式,一種是注冊用戶登錄,另一種是以匿名方式登錄。前者要求用戶首先注冊為服務器的客戶,服務器會給客戶一個登錄賬號和密碼,依據賬號和密碼連結到服務器上。后者要求用戶不用注冊而使用特殊的用戶名"annoymous"和"guest"有限制的訪問遠程主機的公開文件,現在許多系統要求用戶將Email地址作為口令。出于安全的目的,大部分匿名FTP主機一般只允許遠程用戶下載文件,而不允許上傳,這將依賴于FTP服務器的設置。用戶可根據實際情況選擇使用兩種方式。登錄完成后使用FtpClient的binary()方法初始化傳輸方式為字節方式。upload()完成文件的上傳功能。創建源文件的文件輸入流FileInputStream,將輸入流寫入到字節數組中,利用TelnetOutputStream的write方法將字節數組中的數據寫入到一個網絡鏈接上。由于TelnetOutputStream打開的是FTP服務器上的一個文件,所以數據寫入到了目標文件中,這樣就完成了文件上傳。closeConnect()要求與服務器斷開連接。

  以上只是單個文件上傳的過程,如果是多個文件可以多次調用此上傳過程。由以上兩種方式我們可以看出采用FTP協議實現多個文件的上傳比較簡單,容易實現。利用FTP協議上傳文件一般是編寫的客戶端的程序,服務器端的安全設置會比較復雜;而利用HTTP協議上傳文件則是服務器端的應用程序,相對來說安全設置會比較簡單。并且通過測試發現FTP上傳方式在傳輸大文件時速度是HTTP上傳方式的幾十倍甚至幾百倍,但在傳輸小于1M的文件時卻比HTTP上傳方式稍慢一些。所以說兩種傳輸方式各有優勢,請讀者根據自身情況量力而行。如果有什么問題或者是需要其他部分的源碼,請與我聯系!

您可能感興趣的文章:
  • java Springboot實現多文件上傳功能
  • JavaWeb實現多文件上傳及zip打包下載
  • java實現多文件上傳至本地服務器功能
  • Java Web使用Html5 FormData實現多文件上傳功能
  • uploadify java實現多文件上傳和預覽
  • Java中多媒體文件上傳及頁面回顯的操作代碼
  • java 文件上傳(單文件與多文件)
  • java文件上傳(單文件 多文件)與刪除
  • Java實現ftp文件上傳下載解決慢中文亂碼多個文件下載等問題
  • Java實現多文件上傳功能

標簽:拉薩 紅河 馬鞍山 岳陽 亳州 武威 鄭州 大興安嶺

巨人網絡通訊聲明:本文標題《JavaBean實現多文件上傳的兩種方法》,本文關鍵詞  JavaBean,實現,多,文件,上傳,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《JavaBean實現多文件上傳的兩種方法》相關的同類信息!
  • 本頁收集關于JavaBean實現多文件上傳的兩種方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美一区二区三级| 欧美日韩高清不卡| 欧美吞精做爰啪啪高潮| 免费av成人在线| 国产成a人亚洲| 欧美视频在线播放| 国产美女娇喘av呻吟久久| 国产日韩欧美电影| 欧美videos中文字幕| 欧美一区二区三区日韩| 国产一区 二区 三区一级| 色哟哟在线观看一区二区三区| 欧美精品1区2区3区| 亚洲综合成人在线| 亚洲成人久久影院| 激情图片小说一区| 欧美在线一二三| 欧美一区二区三区视频免费播放| 国产一区二区三区视频在线播放| 99精品久久99久久久久| 亚洲视频一二三| 亚洲一二三四在线观看| 蜜桃av噜噜一区| 日本丶国产丶欧美色综合| 亚洲国产精品精华液网站| 欧美午夜在线一二页| 91精品1区2区| 久久综合九色综合欧美98| 久久亚洲综合av| 国产一区二区0| 在线免费不卡视频| 午夜天堂影视香蕉久久| 欧美经典一区二区三区| 成人免费看黄yyy456| 高清av一区二区| 精品国产露脸精彩对白| 午夜激情综合网| 91丨porny丨中文| 亚洲国产视频一区| 国产在线国偷精品免费看| 国内精品嫩模私拍在线| 精品久久一区二区| 国产高清在线精品| 中文字幕在线观看一区| 亚洲成人免费av| 日韩欧美视频一区| 一区二区三区在线播| 日韩一区二区免费在线观看| 久久亚洲免费视频| 色激情天天射综合网| 99久久精品费精品国产一区二区| 成人免费毛片嘿嘿连载视频| 国产欧美日韩综合精品一区二区| 成人激情黄色小说| 亚洲成人动漫在线观看| av不卡在线观看| 色综合天天综合给合国产| 亚洲国产日韩a在线播放| 精品福利av导航| 精品国产免费一区二区三区四区| 香蕉乱码成人久久天堂爱免费| 亚洲高清视频中文字幕| 亚洲欧美电影一区二区| 亚洲精品视频在线| 色88888久久久久久影院按摩| 成人av小说网| 国产精一区二区三区| 亚洲国产精品v| 欧美专区在线观看一区| 免费成人在线视频观看| 亚洲图片欧美综合| 日韩欧美专区在线| 成人的网站免费观看| 国产精品影视在线| 国产精品区一区二区三区| 日韩一区二区三区视频| 欧美人体做爰大胆视频| 91美女蜜桃在线| 日韩欧美国产一区在线观看| 久久爱www久久做| 国产精品69毛片高清亚洲| 国产成人精品一区二| 国产精品亚洲午夜一区二区三区| 奇米色一区二区三区四区| 久久亚洲精精品中文字幕早川悠里 | 91极品视觉盛宴| 国产精品视频一区二区三区不卡| 精品国产3级a| 久久久不卡网国产精品二区| a美女胸又www黄视频久久| 欧日韩精品视频| 不卡电影一区二区三区| 国产宾馆实践打屁股91| 国产精品一区二区三区网站| 9色porny自拍视频一区二区| 色综合久久久久综合体桃花网| 麻豆精品国产传媒mv男同| 一区二区三国产精华液| 在线播放中文一区| 欧美一级欧美一级在线播放| 精品va天堂亚洲国产| 26uuu久久天堂性欧美| 丝袜国产日韩另类美女| 不卡视频在线观看| 日韩综合在线视频| 蜜桃视频第一区免费观看| 国产乱码精品一品二品| 亚洲人成伊人成综合网小说| 亚洲.国产.中文慕字在线| 国产乱码精品一区二区三区五月婷| 色8久久精品久久久久久蜜| www.久久久久久久久| 亚洲色图视频网站| 天天综合日日夜夜精品| 国产精品视频一二| 中文字幕一区二区三区四区| 日本高清成人免费播放| 一区二区三区欧美久久| 成人av免费在线播放| 午夜日韩在线电影| 欧美日韩亚洲综合一区二区三区| 亚洲国产毛片aaaaa无费看 | 91丨porny丨中文| 91麻豆精品国产91久久久更新时间| 国产精品色哟哟| 欧美色成人综合| 激情丁香综合五月| 国产亚洲一本大道中文在线| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品国产三级国产a| 欧美精品久久99| 久久激情五月婷婷| 日韩一级黄色大片| 国产不卡在线播放| 亚洲精品高清视频在线观看| 欧美猛男gaygay网站| 不卡区在线中文字幕| 国产综合久久久久久久久久久久| 国产精品高潮久久久久无| 99久久伊人精品| 久久成人免费电影| 亚洲国产乱码最新视频 | 久久国内精品视频| 久久嫩草精品久久久久| 高清不卡一二三区| 亚洲成av人片一区二区梦乃| 亚洲天堂成人网| 欧美一区二视频| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 精品乱码亚洲一区二区不卡| 免费高清在线视频一区·| 久久激五月天综合精品| 欧美经典一区二区| 蜜桃久久av一区| 成人18视频在线播放| 91网址在线看| 国产suv精品一区二区三区 | 欧美电影在线免费观看| 日韩欧美国产小视频| 欧美精品一级二级| 欧美大片拔萝卜| 91免费视频网址| 欧美三级电影精品| 欧美精品欧美精品系列| 91首页免费视频| 欧美日韩卡一卡二| 欧美日韩国产综合视频在线观看| 在线视频一区二区三| 欧美一级爆毛片| 欧美不卡在线视频| 国产精品久久久久天堂| 亚洲国产综合在线| 色婷婷精品久久二区二区蜜臂av | 欧美一区二区国产| 日韩欧美的一区| 国产日韩欧美在线一区| 欧美不卡一二三| 欧洲视频一区二区| 成人国产精品免费观看动漫| 国产精品一区免费在线观看| 欧美久久一二三四区| 成人午夜视频网站| 色呦呦网站一区| 韩国成人精品a∨在线观看| 在线观看免费亚洲| 午夜欧美2019年伦理| 久久国产三级精品| 亚洲国产成人av网| 4438x亚洲最大成人网| 麻豆国产欧美一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整 | 5858s免费视频成人| 精品久久人人做人人爽| 国产精品美女一区二区| 青青草97国产精品免费观看无弹窗版| 老司机午夜精品| 欧美日韩卡一卡二| 亚洲一区二区免费视频| 国产成人午夜视频| 日韩免费观看高清完整版|