概述
本文講解了一個使用XML技術上傳文件的例子
引言
為了在HTML網頁中獲得上傳功能
<FORM NAME=
ACTION=
ENCTYPE=
METHOD=
<INPUT TYPE=
<INPUT TYPE=
</FORM>
這種方案在客戶端和服務器端的使用都有很多限制
ENCTYPE屬性為表單定義了MIME編碼方式
新的上傳方案
需要按照如下步驟操作
客戶端
使用MSXML
創建一個針對二進制內容的XML節點
使用ADO Stream object將上傳的文件數據放入該節點
使用XMLHTTP對象把這個XML文檔發送給Web服務器
服務器端
從Request對象中讀出XML文檔
讀出二進制節點中的數據並且存儲到服務器上的文件中
在解釋這段代碼之前
對XML的思考
XML格式支持很多數據類型
obj_node
對於二進制數據
obj_node
我們可以創建一個包含多個bin
我們可以使用XMLHttpRequest對象和POST方法發送一個XML文檔給Web服務器
對ADO Stream對象的思考
我們可以在客戶端創建一個包含一個或者多個二進制節點的XML文檔
ADO Stream對象(MDAC
本文中使用Stream對象來訪問文件內容
客戶端
以下示例代碼使用Stream和MSXML對象完成文件上傳動作
<HTML>
<HEAD><TITLE>File Send</TITLE></HEAD>
<BODY>
<INPUT id=btn_send name=
<DIV id=div_message>Ready</DIV>
</BODY>
</HTML>
<SCRIPT LANGUAGE=JavaScript>
// 上傳函數
function btn_send
{
// 創建 ADO
var ado_stream = new ActiveXObject(
// 創建包含默認頭信息和根節點的 XML文檔
var XML_dom = new ActiveXObject(
XML_dom
// 指定數據類型
XML_dom
// 創建一個新節點
var l_node
l_node
// 打開Stream對象
ado_stream
ado_stream
ado_stream
// 將文件內容存入XML節點
l_node
ado_stream
XML_dom
// 可以創建多個二進制節點
// 把XML文檔發送到Web服務器
var XMLhttp = new ActiveXObject(
XMLhttp
XMLhttp
// 顯示服務器返回的信息
div_message
}
</SCRIPT>
服務器端
以下代碼使用相同的對象提供服務器端的上傳處理功能
<%@ LANGUAGE=VBScript%>
<% Option Explicit
Response
dim ado_stream
dim XML_dom
dim XML_file
set ado_stream = Server
set XML_dom = Server
XML_dom
set XML_file
ado_stream
ado_stream
ado_stream
ado_stream
ado_stream
set ado_stream = Nothing
set XML_dom = Nothing
Response
%>
也可以使用Stream對象把數據放到數據庫的BLOB型字段中
使用該方法的益處
不引起頁面轉換
不需要專用組件
可同時上傳多個文件
這段程序是純腳本寫成的
系統安全考慮
該方法只能使用於內部網絡
允許腳本和ActiveX對象
必須允許穿越域訪問數據源
From:http://tw.wingwit.com/Article/program/net/201311/13920.html