| 方案 | 架構層級 | 支援中文檔名 | 客戶端直傳 | 適用場景 |
|---|---|---|---|---|
| mod_plsql (OHS) | Database Gateway | ✅ | ✅ | PL/SQL 為主、輕量級 Web 應用 |
| 9iAS Tag Library / Bean | Middle Tier (J2EE) | ❌ | ✅ | JDeveloper 開發、J2EE 整合專案 |
| JDBC (BLOB/CLOB) | Application Server | 視實作而定 | ❌ (僅 Server 端檔案) | Java 應用、需精細控制串流處理 |
BLOB 或 LONG RAW 欄位,僅能有一個):
CREATE TABLE content_table (
name VARCHAR2(256) PRIMARY KEY,
mime_type VARCHAR2(128),
doc_size NUMBER,
dad_charset VARCHAR2(128),
last_updated DATE,
content_type VARCHAR2(128),
blob_content BLOB
);
content_table/docs/).txt,.pdf),* 表全部CREATE OR REPLACE PROCEDURE upload_page AS
BEGIN
htp.htmlOpen;
htp.bodyOpen;
htp.formOpen('upload_action', 'POST', 'enctype="multipart/form-data"');
htp.formFile('upload_file', '選擇檔案');
htp.formSubmit('上傳');
htp.formClose;
htp.bodyClose;
htp.htmlClose;
END;
plsql_max_request_size (預設 1MB,可調大)oracle.jsp.taglib.fileupload.* 標籤庫oracle.servlet.FileUploadBean JavaBeanin_file.jsp (上傳表單):
<%@ taglib uri="oracle.jsp.taglib.fileupload" prefix="fu" %>
up_file.jsp (處理與列表):
<%
Vector files = uploadBean.getFiles();
for (int i=0; i");
}
%>
dn_file.jsp (下載):
" />
// Blob_in_stream.jsp
File file = new File("/server/path/file.pdf");
FileInputStream fis = new FileInputStream(file);
Connection conn = DriverManager.getConnection(url, user, pwd);
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(
"INSERT INTO docs (id, content) VALUES (?, EMPTY_BLOB())");
ps.setInt(1, 1);
ps.executeUpdate();
ps = conn.prepareStatement("SELECT content FROM docs WHERE id=1 FOR UPDATE");
ResultSet rs = ps.executeQuery();
rs.next();
Blob blob = rs.getBlob(1);
OutputStream os = blob.setBinaryStream(1);
byte[] buffer = new byte[8192];
int len;
while ((len = fis.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
os.close(); fis.close(); rs.close();
conn.commit();
// Blob_w_stream.jsp
Blob blob = rs.getBlob("content");
InputStream is = blob.getBinaryStream();
FileOutputStream fos = new FileOutputStream("/server/path/out.pdf");
// ... copy stream ...
// 注意:此為 Server 本地寫入,非 Client 下載
WWV_FLOW_FILES。三大方案中,mod_plsql 開發效率最高但架構老舊;JDBC 控制最精細但非直傳;9iAS Tag Library 已淘汰。新專案首選 ORDS/APEX 或雲端儲存直傳架構,兼顧開發效能、擴展性與維護性。