使用XML技术上传文件的例子(3)

来源:互联网 时间:2008-05-29 11:33:00 

对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:tmpmyfile.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>

标签:
0
投稿

猜你喜欢

  • MySQL5.7安装过程并重置root密码的方法(shell 脚本)

    2024-01-19 12:26:43
  • 《CSS权威指南》文摘(1)--块级元素、行内元素

    2008-04-05 13:42:00
  • 真正好用的js验证上传文件大小的简单方法

    2024-04-22 13:04:52
  • Vue3中的setup语法糖、computed函数、watch函数详解

    2024-04-29 13:09:33
  • Python模块搜索路径代码详解

    2021-07-11 10:37:17
  • Python3 批量扫描端口的例子

    2021-12-20 05:17:37
  • 在Python中使用MySQL--PyMySQL的基本使用方法

    2024-01-22 20:32:49
  • 详解Python流程控制语句

    2021-05-15 08:25:45
  • 一文详解golang延时任务的实现

    2024-03-23 16:00:16
  • 基于Sql Server通用分页存储过程的解决方法

    2024-01-28 01:14:28
  • 前端之vue3使用WebSocket的详细步骤

    2024-04-30 10:28:54
  • PyCharm如何设置Console控制台输出自动换行

    2022-05-22 03:42:18
  • JS中getElementsByClassName与classList兼容性问题解决方案分析

    2023-08-25 05:39:06
  • 在自动化中用python实现键盘操作的方法详解

    2021-02-04 00:23:48
  • Django 解决distinct无法去除重复数据的问题

    2023-02-09 22:13:22
  • Go语言实现登录验证代码案例

    2024-05-08 10:24:14
  • Go语言编程中字符串切割方法小结

    2023-06-16 01:41:24
  • 利用Go语言搭建WebSocket服务端方法示例

    2024-05-08 10:14:43
  • 苹果Macbook Pro13 M1芯片安装Pillow的方法步骤

    2021-01-11 18:23:46
  • Python中Django框架下的staticfiles使用简介

    2022-08-18 14:04:40
  • asp之家 网络编程 m.aspxhome.com