日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

用服务器传输xml文件格式,XML技术上传文件

發布時間:2024/1/18 asp.net 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用服务器传输xml文件格式,XML技术上传文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

XML技術上傳文件

作者:XML技術上傳文件

來源:

日期:2002-8-8

概述

本文講解了一個使用XML技術上傳文件的例子,使用該方法沒有傳統方法中的種種限制。?這個例子講述了如何使用MSXML3.0和ADO?Stream對象來實現這種新的上傳方法。好處有很多,比如,不需要專用的上傳組件。

引言

為了在HTML網頁中獲得上傳功能,在客戶端我們可以使用如下格式的FORM:

ACTION="TargetURL.asp"

ENCTYPE="multipart/form-data"

METHOD="post">

這種方案在客戶端和服務器端的使用都有很多限制。首先,我們必須使用POST方法,因為GET方法無法處理這樣的表單數據。并且,沒有什么方法可以在不使用表單的情況下引發一個POST動作。把數據發送給表單處理程序后,瀏覽器將會把處理程序作為新頁面加載,然后使用者會看到一個不討人喜歡的頁面轉換過程。

ENCTYPE屬性為表單定義了MIME編碼方式,上傳文件的表單的ENCTYPE屬性必須使用“multipart/form-data”。把這個屬性設置為“multipart/form-data”就創建了一個與傳統結構不同的POST緩沖區(復合結構),ASP的Request對象無法訪問這樣的表單內容。所以,我們可以使用Request.binaryRead方法來訪問這些數據,但是無法使用腳本語言來完成這一切。Request.binaryRead方法返回一個VTarray型數據(只包含無符號一字節字符的Variant型數組)。但是腳本語言只能處理Variant型數據。為了解決這個問題,只能使用專用的ASP上傳組件,或者ISAPI擴展程序,比如CPSHOST.DLL。這是設計上的限制。

新的上傳方案

需要按照如下步驟操作。

客戶端:

使用MSXML?3.0創建一個XML文檔

創建一個針對二進制內容的XML節點

使用ADO?Stream?object將上傳的文件數據放入該節點

使用XMLHTTP對象把這個XML文檔發送給Web服務器

服務器端:

從Request對象中讀出XML文檔

讀出二進制節點中的數據并且存儲到服務器上的文件中。當然,我們也可以將其存儲到數據庫的BLOB型字段中。

在解釋這段代碼之前,我們可以對這個方案進行一些思考。

對XML的思考

XML格式支持很多數據類型,比如numeric,?float,?character等等。很多作者將XML定義為ASCII格式,但是我們不能忽視,XML技術還可以使用“bin.base64”數據類型來描述二進制信息。這個特性在MS?XML3.0解析器重得到完全的支持,但是目前還需要一些特別設置。該對象提供一些可以對二進制數據進行完全控制的屬性:

obj_node.dataType?-?該可讀寫的屬性定義了特定節點的數據類型。MSXML解析器支持更多的數據類型(參見MSDN:http://msdn.microsoft.com/library/psdk/xmlsdk/xmls3z1v.htm)

對于二進制數據,我們可以使用“bin.base64”類型。

obj_node.nodeTypedValue?-?該可讀寫屬性包含了按照制定類型表示的指定節點的數據。

我們可以創建一個包含多個bin.base64類型節點的XML文檔,節點中包含上傳的文件。這點特性可以使用一個POST一次上傳多個文件。

我們可以使用XMLHttpRequest對象和POST方法發送一個XML文檔給Web服務器。該對象為HTTP服務器提供了客戶端協議支持,允許在Web服務器上發送和接受MS?XMLDOM對象。XMLHttpRequest是Internet?Explorer?5內置的COM對象(不需要定制安裝),并且發送完畢后無需轉換頁面。

對ADO?Stream對象的思考

我們可以在客戶端創建一個包含一個或者多個二進制節點的XML文檔。我們還必須把文件內容填入節點中。但是很不幸,腳本語言不能訪問本地文件系統,并且Scripting.FileSystem對象(是Win32系統的內置對象)到目前為止還不能訪問二進制文件。這是設計上的限制。所以我們需要另外找一個可以提供對本地二進制文件的訪問的COM對象。

ADO?Stream對象(MDAC?2.5中的組件)提供了讀、寫和管理二進制流數據的手段。字節流的內容可以是文本,或者二進制數據,并且沒有容量上的限制。在ADO?2.5中,Microsoft對Stream對象的介紹不屬于ADO對象結構的任何一層,所以,我們無需捆綁即可使用該對象。

本文中使用Stream對象來訪問文件內容,再把內容存入XML節點。

客戶端

以下示例代碼使用Stream和MSXML對象完成文件上傳動作。

File?Send Ready

//?上傳函數

function?btn_send.onclick()

{

//?創建?ADO-stream?對象

var?ado_stream?=?new?ActiveXObject("ADODB.Stream");

//?創建包含默認頭信息和根節點的?XML文檔

var?xml_dom?=?new?ActiveXObject("MSXML2.DOMDocument");

xml_dom.loadXML('<?xml ?version="1.0"??>?');

//?指定數據類型

xml_dom.documentElement.setAttribute("xmlns:dt",?"urn:schemas-microsoft-com:datatypes");

//?創建一個新節點,設置其為二進制數據節點

var?l_node1?=?xml_dom.createElement("file1");

l_node1.dataType?=?"bin.base64";

//?打開Stream對象,讀源文件

ado_stream.Type?=?1;?//?1=adTypeBinary

ado_stream.Open();

ado_stream.LoadFromFile("c:\\tmp\\myfile.doc");

//?將文件內容存入XML節點

l_node1.nodeTypedValue?=?ado_stream.Read(-1);?//?-1=adReadAll

ado_stream.Close();

xml_dom.documentElement.appendChild(l_node1);

//?可以創建多個二進制節點,一次上傳多個文件

//?把XML文檔發送到Web服務器

var?xmlhttp?=?new?ActiveXObject("Microsoft.XMLHTTP");

xmlhttp.open("POST","./file_recieve.asp",false);

xmlhttp.send(xml_dom);

//?顯示服務器返回的信息

div_message.innerHTML?=?xmlhttp.ResponseText;

}

服務器端

以下代碼使用相同的對象提供服務器端的上傳處理功能。

Response.Expires?=?0

'?定義變量和對象。

dim?ado_stream

dim?xml_dom

dim?xml_file1

'?創建?Stream?對象

set?ado_stream?=?Server.CreateObject("ADODB.Stream")

'?從Request對象創建?XMLDOM對象

set?xml_dom?=?Server.CreateObject("MSXML2.DOMDocument")

xml_dom.load(request)

'?讀出包含二進制數據的節點

set?xml_file1?=?xml_dom.selectSingleNode("root/file1")

'?打開Stream對象,把數據存入其中

ado_stream.Type?=?1?'?1=adTypeBinary

ado_stream.open

ado_stream.Write?xml_file1.nodeTypedValue

'?文件存盤

ado_stream.SaveToFile?"c:\tmp\upload1.doc",2?'?2=adSaveCreateOverWrite

ado_stream.close

'?銷毀對象

set?ado_stream?=?Nothing

set?xml_dom?=?Nothing

'?向瀏覽器返回信息

Response.Write?"Upload?successful!"

%>

也可以使用Stream對象把數據放到數據庫的BLOB型字段中。

使用該方法的益處

不引起頁面轉換。

不需要專用組件。

可同時上傳多個文件。

這段程序是純腳本寫成的,可以很容易的插入到其他代碼中,而不需要任何HTML對象的配合。還可以把這個邏輯在任何支持COM標準的語言中實現。

系統安全考慮

該方法只能使用于內部網絡,因為它需要IE5的安全級別設置為“低”。必須:

允許腳本和ActiveX對象。該設置允許瀏覽器執行類似?"myobj?=?new?activexobject(...)"的?JScript語句;

必須允許穿越域訪問數據源。這個設置允許在客戶端使用Stream對象。還必須在服務器和客戶端都安裝MS?XML?DOM?3.0?和MDAC?2.5?。

總結

以上是生活随笔為你收集整理的用服务器传输xml文件格式,XML技术上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。