asfman
android developer
posts - 90,  comments - 213,  trackbacks - 0
用javascript从access数据库提取文件
一、原理
1、用javascript在客户端通过ADODB.Connection建立与access数据库的连接,通过ADODB.Recordset打开数据库。
2、在客户端利用Scripting.FileSystemObject组件检测要解包的文件夹是否存在,如果不存在,就创建文件夹。
3、Adodb.Stream组件在客户端将数据流生成文件。

二、实现

数据库:
表名:FL
FileName:文件名
FileData:二进制文件内容
FilePath:文件路径

以下是我写的客户端解包程序代码,大家把下面的代码保存为hta格式的文件即可!
注:高版本的IE浏览器内不可以直接调用Adodb.Stream组件。

<HTML>
<HEAD>
<TITLE> IISVS_文件解包工具 </TITLE>
<meta name="description" content="作者:翟振凯,小琦">
<SCRIPT LANGUAGE="JavaScript">
<!--
function get_files(filename,filePath) {//核心代码 作者:翟振恺(小琦) iisvs.com
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;
//-----------------作者:翟振恺(小琦) iisvs.com
}
}
        rs.moveNext;
    }
   
    rs.close();
    rs = null;
    con.close();
    con = null;
        
alert("解压完成!用时"+(new Date()-o)/1000+"毫秒");   
}

function Create_dir(filePath,dir){//创建文件夹函数
//-----------------作者:翟振恺(小琦) iisvs.com
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编程的一个原因。


附件
附件包涵两个文件
1、Cnt_ADODB.Stream.hta 解包程序
2、db.mdb 包涵文件的数据库

附件下载连接地址:http://www.iisvs.com/down.htm

至此,全文完,欢迎大家在此讨论与此相关技术,谢谢!
作者:翟振恺(小琦)
网址:iisvs.com http://www.xiaoqi.net
希望大家转载时,不要把作者版权去掉,谢谢合作!
------------------------------------------修改记录
2005年11月29日加入版权信息!
posted on 2007-06-06 00:55 汪杰 阅读(323) 评论(0)  编辑 收藏 引用 所属分类: javascript
只有注册用户登录后才能发表评论。

<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿(15)

随笔分类(1)

随笔档案(90)

文章分类(727)

文章档案(712)

相册

收藏夹

http://blog.csdn.net/prodigynonsense

友情链接

最新随笔

搜索

  •  

积分与排名

  • 积分 - 468991
  • 排名 - 6

最新随笔

最新评论

阅读排行榜

评论排行榜