首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 三種檔案上傳技術詳解:mod_plsql、9iAS 標籤庫與 JDBC 實作

     編輯:Oracle 資料庫相關知識

概述

Oracle 提供多種檔案上傳路徑,本文聚焦三大主流技術:

  1. Oracle HTTP Server (OHS) mod_plsql 模組 — 透過 Web 頁面上傳至資料庫;
  2. Oracle 9iAS 標籤庫與 Bean — 元件化上傳方案;
  3. JDBC 程式化上傳 — 客戶端直接寫入資料庫或檔案系統。

一、mod_plsql 上傳完整實作

1. 建立文件存取表

每筆上傳檔案佔用一列,CONTENT_TYPE 僅支援單一 BLOB 或 LONG RAW 欄位:

CREATE TABLE content_table (
    NAME            VARCHAR2(128) UNIQUE NOT NULL,
    MIME_TYPE       VARCHAR2(128),
    DOC_SIZE        NUMBER,
    DAD_CHARSET     VARCHAR2(128),
    LAST_UPDATED    DATE,
    CONTENT_TYPE    VARCHAR2(128),
    CONTENT         LONG RAW,
    BLOB_CONTENT    BLOB
);

2. 配置 DAD (Database Access Descriptor)

  • 啟動資料庫與 OHS 後,建立 DAD;
  • 「Gateway 使用文件表」指向 content_table;
  • 「文件存取路徑」設定虛擬路徑;
  • 「文件存取程序」指定處理上傳/下載的 PL/SQL 程序;
  • 預設以 BLOB 上傳,可透過 Long Raw 欄位指定副檔名覆寫預設行為。

3. 上傳頁面程序 (IN_FILE)

使用 HTP.PRN 輸出 HTML 表單,enctype="multipart/form-data",action 指向處理程序 /pls/upfile/write_infos。表單包含標題、類別、作者、摘要及最多四個檔案輸入欄位。

4. 處理上傳與記錄程序 (WRITE_INFOS)

CREATE OR REPLACE PROCEDURE WRITE_INFOS (
    filetitle   IN VARCHAR2,
    up_file     IN OWA.VC_ARR,
    filesort    IN VARCHAR2,
    author      IN VARCHAR2,
    abstract    IN VARCHAR2,
    localsort   IN VARCHAR2
) AS
    i NUMBER := 1;
BEGIN
    HTP.HTMLOPEN; HTP.HEADOPEN; HTP.TITLE('File Uploaded'); HTP.HEADCLOSE; HTP.BODYOPEN;
    HTP.HEADER(1, 'Upload Status');
    WHILE TRUE LOOP
        BEGIN
            HTP.PRN('Uploaded ' || up_file(i) || ' successfully!
'); HTP.PRN('Open this file!
'); INSERT INTO "ZYFILEUP"."FILE_TABLE" VALUES (filetitle, up_file(i), filesort, author, SYSDATE, abstract, localsort); COMMIT; i := i + 1; EXCEPTION WHEN NO_DATA_FOUND THEN EXIT; END; END LOOP; HTP.LINE; HTP.PRINT('Uploaded successfully!'); HTP.BODYCLOSE; HTP.HTMLCLOSE; END;

注意:文件表上傳時間可能與系統時間不符,疑為已知 Bug,需關注補丁。

5. 下載/瀏覽程序 (DOWNFILE)

CREATE OR REPLACE PROCEDURE DOWNFILE (upfilename IN VARCHAR2) AS
    mimetype VARCHAR2(100);
    myblob   BLOB;
BEGIN
    SELECT mime_type, blob_content
    INTO mimetype, myblob
    FROM zyfileup.content_table
    WHERE name = upfilename;
    OWA_UTIL.MIME_HEADER(mimetype, TRUE);
    WPG_DOCLOAD.DOWNLOAD_FILE(myblob);
END;

瀏覽器將依 MIME 類型自動開啟或下載檔案。

二、Oracle 9iAS 標籤庫與 Bean 上傳

利用 <fileUpload> 標籤與 FileUploadBean,支援多檔上傳、大小限制、型別驗證,適合 JSP/Servlet 架構,程式碼較簡潔,此處略過詳細代碼。

三、JDBC 程式化上傳

使用 PreparedStatement.setBinaryStream 或 setBlob 將檔案流直接寫入資料庫 BLOB 欄位,適用於獨立 Java 應用或批次匯入工具,效能最高,但需自行處理連線池、交易與錯誤重試。

技術選型建議

技術適用場景優點缺點
mod_plsql簡單 Web 表單上傳、內部系統零 Java 程式碼、支援中文檔名、自動識別 MIME單列單檔、擴充性受限
9iAS Taglib/BeanJ2EE 應用整合元件化、支援驗證、易維護需 9iAS 環境、學習曲線
JDBC批次匯入、高效能需求、非 Web 環境完全控制、效能最佳、無中介層開發量大、需自行管理資源

結語

根據系統架構、團隊技術棧與業務需求選擇適合的上傳方案。mod_plsql 適合快速原型與內部工具;J2EE 專案優先考慮標籤庫;大量資料遷移或高併發場景首選 JDBC。

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