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

首頁 > 開發 > XML > 正文

XML技術上傳文件-轉貼

2024-09-05 20:55:44
字體:
來源:轉載
供稿:網友
                        xml技術上傳文件

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


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

<form name="myform"
action="targeturl.asp"
enctype="multipart/form-data"
method="post">
<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</div>
</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 version="1.0" ?> <root/>');
// 指定數據類型
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
91在线直播亚洲| 欧美极品在线播放| 亚洲男人第一网站| 久久久亚洲成人| 国产91精品网站| 国产盗摄xxxx视频xxx69| 欧美激情视频在线观看| 美日韩在线视频| 亚洲一区二区免费在线| 国产欧美精品xxxx另类| 懂色av中文一区二区三区天美| 久久色免费在线视频| 欧美在线亚洲在线| 久久久久久网址| 欧美国产日韩精品| 国产精品久久久久久久久影视| 亚洲精品久久7777777| 欧美激情一区二区三区高清视频| 三级精品视频久久久久| 欧美一区在线直播| 国产精品爽爽ⅴa在线观看| 国产精品嫩草影院一区二区| 欧美电影院免费观看| 日韩高清中文字幕| 中文字幕欧美日韩精品| 日韩免费看的电影电视剧大全| 国产精品青青在线观看爽香蕉| 欧美另类老肥妇| 国产精品h在线观看| 久久久国产视频91| 国产精品网站视频| 国产欧美日韩亚洲精品| 久久久久日韩精品久久久男男| 亚洲欧美国产日韩中文字幕| 久久久久久久一区二区| 456国产精品| 97精品免费视频| 色偷偷av一区二区三区乱| 国产精品视频自拍| 亚洲电影免费在线观看| 成人欧美一区二区三区在线湿哒哒| 国产自摸综合网| 狠狠色狠狠色综合日日小说| 亚洲国产精品小视频| 97精品国产97久久久久久免费| 国产一区二区三区三区在线观看| 国产拍精品一二三| 日韩在线www| 日韩中文字幕精品视频| 海角国产乱辈乱精品视频| 91网在线免费观看| 中文字幕国产亚洲2019| 亚洲第一男人天堂| 久久久av免费| 久99久在线视频| 久久九九全国免费精品观看| 成人h视频在线| 69**夜色精品国产69乱| 国产97在线|日韩| 欧美丰满老妇厨房牲生活| 精品国产91久久久久久| 成人久久久久爱| 久久激情视频免费观看| 91手机视频在线观看| 欧美激情在线观看视频| 成人免费在线视频网址| 97香蕉超级碰碰久久免费的优势| 国产精品女人久久久久久| 91综合免费在线| 国产999视频| 亚洲国产成人精品一区二区| 亚洲国产精品推荐| 国产精品久久久久久久久久东京| 国产精品久久久久久久久久久久久| 久久久在线免费观看| 中日韩午夜理伦电影免费| 法国裸体一区二区| 国产视频福利一区| 日韩免费观看高清| 久久久亚洲影院你懂的| 欧美日韩精品在线视频| 97视频在线免费观看| 成人福利网站在线观看| 亚洲精品网站在线播放gif| 精品无人区太爽高潮在线播放| 美女视频久久黄| 日韩在线免费高清视频| 久久久久久久久久久久av| 日韩av成人在线| 欧美亚洲视频在线观看| 91九色国产社区在线观看| 日韩免费av一区二区| 不卡伊人av在线播放| 久国内精品在线| 欧美激情a∨在线视频播放| 欧美国产日韩一区二区| 欧美激情伊人电影| 国产日韩亚洲欧美| 亚洲国产黄色片| 国产精品三级久久久久久电影| 午夜精品一区二区三区在线播放| 日韩在线视频免费观看高清中文| 欧美极度另类性三渗透| 国产精品免费久久久| 亚洲午夜精品久久久久久久久久久久| 欧美激情亚洲精品| 欧美亚洲午夜视频在线观看| 2025国产精品视频| 在线播放精品一区二区三区| 久久影视免费观看| 精品国产视频在线| 97精品国产aⅴ7777| 国产精品视频网| 最近2019中文字幕在线高清| 国产欧美精品xxxx另类| 韩国欧美亚洲国产| 国产精品久久综合av爱欲tv| 欧美亚洲成人xxx| 久久综合色88| 国产精品久久久av久久久| 欧美成人h版在线观看| 在线精品播放av| 亚洲电影成人av99爱色| 38少妇精品导航| 一区二区三区回区在观看免费视频| 91亚洲一区精品| 日韩成人在线网站| 久久久久久国产精品久久| 久久精品国产亚洲精品2020| 另类视频在线观看| 欧美xxxx18国产| 亚洲人成五月天| 欧美成人精品h版在线观看| 欧美性猛交xxxx富婆弯腰| 97精品一区二区视频在线观看| 亚洲国产又黄又爽女人高潮的| 国产精品欧美亚洲777777| 亚洲成人久久久| 国产日韩欧美91| 亚洲激情在线观看视频免费| 91精品视频免费观看| 欧美激情免费看| 一个色综合导航| 久久手机免费视频| 欧美成人h版在线观看| 精品国产乱码久久久久久婷婷| 亚洲色图激情小说| 欧美福利小视频| 最近2019中文字幕大全第二页| 久久久之久亚州精品露出| 亚洲国产精久久久久久| 欧美日韩人人澡狠狠躁视频| 日本精品久久久久影院| 久久伊人精品一区二区三区| 欧美日韩国产精品一区二区三区四区| 中文字幕av一区中文字幕天堂| 日韩美女在线观看| 国产精品久久77777| 中文字幕一区二区三区电影| 欧美福利在线观看| 亚洲欧美日本伦理| 91国内揄拍国内精品对白| 欧美成人自拍视频| 国产精品福利网|