首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

JavaBean 實現多文件上傳全攻略:HTTP 與 FTP 協議實戰

     編輯:Java 程式設計入門

JavaBean 是基於 Java 的軟體組件,JSP 對其整合提供完善支援,不僅縮短開發時間(復用經測試可信組件),更賦予應用更強擴展性。文件上傳在 B/S 開發中極常見。對比其他工具:JSP 不像 ASP 必須用組件,也不像 PHP 直接支援上傳。JSP 實現方式:用 ServletRequest.getInputStream() 獲取客戶端數據流,解析參數與文件數據,存儲為文件或入庫。通常不在 JSP 頁面處理,而是放入 Servlet 或 JavaBean。本文介紹 JavaBean 實現多文件上傳,採 HTTP 與 FTP 兩種協議,原理差異大。調試環境:Win2000 Server + Apache + Tomcat 4.0,JDK 1.4 + EditPlus。

架構:三類文件協作

  • HTML 頁面:提供上傳介面
  • JSP 文件:調用 JavaBean 實現上傳
  • Java 類文件:實現 JavaBean 核心邏輯

HTTP 協議實現多文件上傳

早期 HTML 表單不支援文件上傳。RFC1867 擴展表單,新增 <input type="file"> 元素,瀏覽器自動生成輸入框與「瀏覽」按鈕。表單實現:

<FORM METHOD="POST" ACTION="*.jsp" ENCTYPE="multipart/form-data">
<INPUT type="file" size="50" name="FILE1">
<INPUT type="submit" value="Upload">
</FORM>

選擇文件後表單提交至 *.jsp,實現 HTTP 文件上傳。傳輸由 HTTP 協議 CGI 支援,要求瀏覽器與 Web Server 均支援 RFC1867。JavaBean 通過 getInputStream() 獲取數據流、分析格式,按分隔符分離多文件輸出到服務器目標目錄。核心類 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 實例(由 Files 管理),File.save() 依次輸出文件。upload() 是關鍵,分析 HTTP 1.1 協議傳輸格式。測試發現上傳 t.txt 格式如下:

// 文件分隔符
-----------------------------7d226137250336
// 文件信息頭
Content-Disposition: form-data; name="FILE1"; filename="C:\Documents and Settings\Administrator\My Documents\t.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() 需分析:確定分隔符、各文件格式、完整路徑、數據始末位置。

FTP 協議實現(略)

FTP 方式原理不同,適合大文件、斷點續傳場景,核心在於建立 FTP 連接、進入被動/主動模式、流式傳輸。代碼結構類似但底層通訊協議不同。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved