如何通过使用 XMLHTTP 发送二进制流

 我来答
huanglenzhi
2016-02-03 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517188
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
本例使用ADODB.Stream 对象来保存将发送回服务器的二进制数据。 如果已经以并列模式安装了更高版本的 MSXML,要使用该特定版本运行示例代码,必须明确使用该版本的 GUID 或 ProgID。例如,MSXML 第 4 版仅在并列模式下安装。请参考以下 Microsoft 知识库文章,了解使用 MSXML 4.0 分析器运行示例代码需要更改哪些代码:Q305019 INFO:MSXML 4.0 Specific GUIDs and ProgIds(MSXML 4.0 特定的 GUID 和 ProgId)。

例如,在以下代码中,您将用 MSXML 4.0 和下面的语句创建对象:
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.4.0");
xmldoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.4.0");
要用 XMLHTTP 向服务器发送二进制数据流,请遵循以下步骤:
将下面的代码粘贴到默认 Web 文件夹中的某个文件中并将该文件命名为 Receiver.asp。
<%
dim Connection
dim rs
Connection = "Provider=SQLOLEDB.1;Data Source=servername;User Id=username;Password=password;Initial Catalog=Northwind;"
sql = "Select * from Customers"

set rs = server.CreateObject("ADODB.Recordset")

if Request.QueryString("getRecordset") = "YES" then
rs.ActiveConnection = Connection
rs.CursorLocation = 3 'Client Side
rs.CursorType = 3 'Static Recordset
rs.LockType = 4 'Batch Optimistic
rs.Open sql
rs.Save response, 1 'persist adPersistXML
Response.End
else
rs.open Request '.BinaryRead(Request.TotalBytes)
rs.activeconnection = Connection 'Reconnect
rs.updatebatch 'Update adAffectAll
rs.close
Response.Write "Recordset Saved" 'Send back response
Response.End
end if

%>

将下面的代码粘贴到默认 Web 文件夹中的某个文件中并将该文件命名为 Sender.asp
<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--

var rs;
var xmldoc;
var xmlstream;

function SendRS_onclick() {
xmlstream = new ActiveXObject("ADODB.Stream");
xmlstream.Mode = 3; //read write
xmlstream.Open();
xmlstream.Type = 1; // adTypeBinary
rs.Save(xmlstream,0); //adpersistadtg
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
xmlhttp.Open("POST","http://localhost/Receiver.asp?getRecordset=NO",false);
xmlhttp.setRequestHeader("Content-Length",xmlstream.Size); //set the length of the content
xmlhttp.send(xmlstream.Read(xmlstream.Size)); //Send the stream
alert(xmlhttp.responseText);
}

function getRS_onclick() {
rs = new ActiveXObject("ADODB.Recordset");
xmldoc = new ActiveXObject("Msxml2.DOMDocument");
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
xmlhttp.Open("Get","http://localhost/Receiver.asp?getRecordset=YES",false);
xmlhttp.send();
xmldoc.loadXML(xmlhttp.responseText); //load the returned stream into the dom document
rs.Open(xmldoc); //load the dom document into the recordset
alert("Recordset Loaded");
}

function Update_onclick() {
alert("before: " + rs.Fields(2).Value);
rs.Fields(2).Value = rs.Fields(2).Value + "!";
rs.Update();
alert("after: " + rs.Fields(2).Value);
}

//-->
</SCRIPT>
<INPUT type="button" value="Get Recordset" id=getRS name=getRS LANGUAGE=javascript onclick="return getRS_onclick()">
<INPUT type="button" value="Update" id=Update name=Update LANGUAGE=javascript onclick="return Update_onclick()">
<INPUT type="button" value="Send Recordset" id=SendRS name=SendRS LANGUAGE=javascript onclick="return SendRS_onclick()">

修改 Receiver.asp 页,使连接变量包含 Microsoft SQL Server 名称和有效的 SQL 用户 ID 和密码。
启动 Microsoft Internet Explorer,然后浏览到 http://localhost/sender.asp
单击Get Recordset(获得记录集)。出现一个消息框,告诉您记录集已成功加载。
单击Update(更新)。出现一个消息框,显示更新前的值。出现第二个消息框,显示更新后的值。
单击Send Recordset(发送记录集)。出现一个消息框,告诉您记录集已更新。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式