亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

XML技術上傳文件

2019-11-18 20:02:46
字體:
來源:轉載
供稿:網友

xml技術上傳文件
類型: XML/Biztalk

概述

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


引言

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

< FORM NAME="myForm" ACTION="TargetURL.asp" ENCTYPE="mult< INPUT TYPE="file" NAME="myFile" >
< INPUT TYPE="submit" VALUE="Upload File" >
< /FORM >


  這種方案在客戶端和服務器端的使用都有很多限制。首先,我們必須使用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對象完成文件上傳動作。

< HTML >
< HEAD >< TITLE >File Send< /TITLE >< /HEAD >
< BODY >
< INPUT id=btn_send name="btn_send" type=button value="FILE SEND" >
< DIV id=div_message >Ready


< /BODY >
< /HTML >

< SCRIPT LANGUAGE=javaScript >

// 上傳函數
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_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;
}
< /SCRIPT >

服務器端

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


< %@ LANGUAGE=VBScript% >
< % Option Explicit
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 。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久久久中文字幕大豆网| 欧美怡红院视频一区二区三区| 欧美国产日韩中文字幕在线| 国产亚洲a∨片在线观看| 国产精品露脸av在线| 色综合久久精品亚洲国产| 日韩av快播网址| 97视频在线观看网址| 黑人巨大精品欧美一区二区三区| 69视频在线免费观看| 国产精品久久久精品| 久久精品国亚洲| 欧美性xxxxxxx| 亚洲欧美变态国产另类| 精品久久香蕉国产线看观看gif| 欧美有码在线观看| 精品久久香蕉国产线看观看gif| 伊人成人开心激情综合网| 中文字幕亚洲激情| 亚洲精品成人网| 欧美三级欧美成人高清www| 久久综合色88| 国产精品入口免费视频一| 91久久久在线| 91欧美日韩一区| 精品亚洲va在线va天堂资源站| 亚洲欧美激情四射在线日| 国产精品视频xxxx| 国产精品高清免费在线观看| 欧洲中文字幕国产精品| 国产精品久久精品| 亚洲成人久久一区| 国产va免费精品高清在线观看| 亚洲999一在线观看www| 欧美人交a欧美精品| 精品日韩中文字幕| 午夜精品视频在线| 欧美日韩国产区| 日本欧美一级片| 成人在线小视频| 亚洲a级在线观看| 久久免费视频网| 亚洲一级一级97网| 亚洲女人被黑人巨大进入| 精品久久久久久中文字幕一区奶水| 亚洲午夜久久久影院| 欧美日韩亚洲视频一区| 国产不卡av在线免费观看| 色妞一区二区三区| 日本亚洲精品在线观看| 亚洲a成v人在线观看| 亚洲人午夜精品| 国产精品久久久久av免费| 欧美黄色三级网站| 久久99热这里只有精品国产| 亚洲永久在线观看| 欧美性生交大片免网| 亚洲欧美制服丝袜| 精品成人av一区| 欧美大片欧美激情性色a∨久久| 一区二区三区 在线观看视| 中文字幕欧美日韩| 激情懂色av一区av二区av| 亚洲欧美一区二区激情| 狠狠做深爱婷婷久久综合一区| 色播久久人人爽人人爽人人片视av| 91社影院在线观看| 欧美视频在线看| 日韩在线观看精品| 国产亚洲在线播放| 久久久成人的性感天堂| 国产视频精品一区二区三区| 日本一区二区三区四区视频| 欧美激情国内偷拍| 国产成人综合久久| 精品国内自产拍在线观看| 国产精品久久久久久久久免费看| 欧美日韩高清区| 91久久久久久久久| 久热在线中文字幕色999舞| 亚洲国产欧美一区二区三区久久| 深夜福利91大全| 成人午夜黄色影院| www.日韩av.com| 欧美性猛交视频| 欧美性视频网站| 国产成人一区二| 日韩电影视频免费| 538国产精品视频一区二区| 久久成人免费视频| 欧美国产在线视频| 国产精品电影网站| 久久精品91久久香蕉加勒比| 日韩欧美第一页| 97视频在线观看免费| 日本高清不卡的在线| 久久久国产一区| 久久久久久久久综合| 欧美成人精品在线播放| 成人国产精品av| 亲爱的老师9免费观看全集电视剧| 成人黄色短视频在线观看| 中文字幕亚洲色图| 日韩毛片中文字幕| 欧美香蕉大胸在线视频观看| 欧美肥婆姓交大片| 亚洲护士老师的毛茸茸最新章节| 久久精品视频播放| 国产成人一区二区三区小说| 久久精品视频99| 91久久久久久久久久久| 成人激情视频在线播放| 欧美激情国内偷拍| 久久国产精品久久国产精品| 91九色国产在线| 中文字幕精品久久| 国产精品27p| 日韩在线中文字幕| 久久久精品在线| 欧美一级淫片videoshd| 欧美午夜美女看片| 欧美成aaa人片在线观看蜜臀| 大伊人狠狠躁夜夜躁av一区| 亚洲福利视频在线| 精品日本高清在线播放| 中文字幕免费精品一区| 日韩精品在线免费观看视频| 久久久亚洲福利精品午夜| 午夜伦理精品一区| 欧美国产日韩中文字幕在线| 韩国三级日本三级少妇99| 国产第一区电影| 国产一区视频在线| 日本精品久久中文字幕佐佐木| 国产精品h在线观看| 国产精品免费电影| 亚洲va欧美va在线观看| 欧美精品激情在线观看| 国产精品∨欧美精品v日韩精品| 国产不卡在线观看| 亚洲日韩欧美视频一区| 精品亚洲一区二区| 日本一欧美一欧美一亚洲视频| 亚洲精品乱码久久久久久按摩观| 亚洲色图美腿丝袜| 不卡av电影在线观看| 欧洲亚洲免费在线| 日本韩国欧美精品大片卡二| 91免费在线视频网站| 欧美成人在线网站| 久久99久久99精品免观看粉嫩| 一区二区三区四区在线观看视频| 国内精品中文字幕| 精品久久香蕉国产线看观看gif| 亚洲老板91色精品久久| www.日韩不卡电影av| 这里只有精品视频在线| 亚洲欧美日韩一区在线| 国产精品美女免费| 久久精品一本久久99精品| 91视频-88av| 在线电影欧美日韩一区二区私密| 黑人巨大精品欧美一区二区免费| 啪一啪鲁一鲁2019在线视频|