文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
document 对象
Window.Open详解
JS replace 方法
JScript 属性
JScript 对象
JScript 方法
关于window.opener的用法
JavaScript语法——style.display 属..
不被拦截的弹出窗口代码
showModalDialog和showModelessDialog..
showModelessDialog()使用详解
IE中非模式对话框(showModelessDialog..
JS eval()函数
Preferences 指南
JS中的setTimeout和setInterval的区别
JavaScript对象与数组参考大全
javascript动态增加、删除、填充表格..
用Java实现几种常见的排序算法
JavaScript 日期函数
JavaScript 使用字符串函数
如何用Javascript获得TextArea中的光..
Document 对象方法
在input中只能输入数字
selection.createRange() 用法例子
获取网页各种宽高的值
JavaScript方法 - indexOf方法
substring函数详解
40种网页常用小技巧(javascript)
event.X和event.clientX有什么区别
clientX, clientY,offsetX, offsetY,..


技术教程 -> JavaScript教程 ->  
用javascript从access数据库提取文件
来源:   人气:844   录入时间:2007-11-8
    
   文章作者:翟振凯 (小琦)
   交流方式:
   个人站:http://www.xiaoqi.net
   技术站:http://www.iisvs.net
   商业站:http://www.iisvs.com
   QQ:53353866 22336848
   前言:
   为了鼓励共享精神,请尊重他人劳动成果,转载时,请不要去掉版权,谢谢合作。
   
   《不需要WScript.Shell权限,无组件在线打包,支持服务端解压缩及客户端解压缩的程序!!》
   这篇文章是我11月25日发布的,今天落伍的兄弟"Lukin"向我指出了这种程序在前一段时间就已经有人发布过了。
   并且他还提供了下载地址。
   我下载下来,看了一下,才知道他的原理和我的原理是一样的。只是客户端实现解包的方法不同。
   在此,我要先谢谢他,再继续下文。
   
   注:此方法完全是本人原创,在今天发布之前,也从来没有遇到过与这种方法相关的资料!
   
   ******************用JAVASCRIPT在客户端编程,是很有乐趣的***********************
   用javascript从access数据库提取文件
   一、原理
   1、用javascript在客户端通过ADODB.Connection建立与access数据库的连接,通过ADODB.Recordset打开数据库。
   2、在客户端利用Scripting.FileSystemObject组件检测要解包的文件夹是否存在,如果不存在,就创建文件夹。
   3、Adodb.Stream组件在客户端将数据流生成文件。
   
   二、实现
   
   
   CODE:数据库:
   表名:FL
   FileName:文件名
   FileData:二进制文件内容
   FilePath:文件路径
   以下是我写的客户端解包程序代码,大家把下面的代码保存为hta格式的文件即可!
   注:高版本的IE浏览器内不可以直接调用Adodb.Stream组件。
   
   
   CODE:<HTML>
   <HEAD>
   <TITLE> IISVS_文件解包工具 </TITLE>
   <meta name="description" content="作者:翟振凯,小琦">
   
   <SCRIPT LANGUAGE="JavaScript">
   <!--
   function get_files(filename,filePath) {//核心代码
   var o=new Date();
   var fso = new ActiveXObject("Scripting.FileSystemObject");
   
    //生成查询和更新用的sql语句。
    var sqlSelCnt = "SELECT * FROM [FL] ";
   
    //建立连接,并生成相关字符串。
    var con = new ActiveXObject("ADODB.Connection");
    con.Provider = "Microsoft.Jet.OLEDB.4.0";
    con.ConnectionString = "Data Source=" + filename;
    con.open;
    var rs = new ActiveXObject("ADODB.Recordset");
    rs.open(sqlSelCnt,con);
   
    while (!rs.eof) {
    var path2 = filePath + rs.Fields("FilePath") ;
    var path3 = path2 + rs.Fields("FileName");
   
    var fsize = rs.Fields("Filedata").ActualSize;
   Create_dir(filePath,rs.Fields("FilePath"));//创建文件夹函数
   
   if (fsize!=0){ //如果文件大小不为0,也就是说,非文件夹
   
   if (fso.FileExists(path3)==false){//检测文件是否存在,如不存在就创建文件
   
   var adodbStream = new ActiveXObject("ADODB.Stream");
   adodbStream.Type =1//以二进制模式打开
   adodbStream.Open();
   adodbStream.write(rs.Fields("Filedata").GetChunk(fsize));
   adodbStream.SaveToFile(path3,2);
   adodbStream.Close();
   adodbStream=null;
   
   }
   }
    rs.moveNext;
    }
   
    rs.close();
    rs = null;
    con.close();
    con = null;
   
   alert("解压完成!用时"+(new Date()-o)/1000+"毫秒");
   }
   
   function Create_dir(filePath,dir){//创建文件夹函数
   tt.value=dir
   dir=tt.value
   var fso = new ActiveXObject("Scripting.FileSystemObject");
    var dir2=""
    sTrArr2=dir.split("\\")
    for (var k=0;k<sTrArr2.length; k++){
   
    if(sTrArr2[k]!=undefined){
   
    if (fso.FolderExists((filePath+dir2))==false) fso.CreateFolder((filePath+dir2));//检测文件夹是否存在
    dir2+=sTrArr2[k]+"\\"
   
    }
    }
   }
   
   
   function iv(inp,act)//取到数据库所在路径
   {
    iDot = inp.lastIndexOf('\\');
    if(iDot>-1) dir = inp.substr(iDot+1).toLowerCase();
    show1.innerHTML =inp
    show2.innerHTML =inp.substring(0, iDot+1)//取到数据库所在路径
    if (act==1) get_files(inp,inp.substring(0, iDot+1));
   }
   //-->
   </SCRIPT>
   </HEAD>
   
   <BODY>
   <input name=tt id=tt value="" type="hidden">
   
   解包文件地址:<div id="show1"></div><br>
   解包文件所在文件夹:<div id="show2"></div>
   选择要解包的文件:<input type="file" id=ph onpropertychange="iv(this.value,0)"/> <input type="submit" value="解包" name="B1" onclick="iv(ph.value,1)"></BODY>
   </HTML>
   相信大家看完,一定会感觉此方法技术含量不大,但我感觉此方法的确很有实用价值!
   
   有些时候,点子要比技术更加重要。用最简单的技术,实现最有价值的功能,是我不懈的追求,也是我到目前还没有放弃ASP编程的一个原因。




Copyright(C)2007-2024 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987