ASP在线解压zip文件以及采集gzip压缩的页面的方法
在使用下面的代码前把cmd.exe(windows文件夹下有)和7za.exe拷贝到asp程序目录
代码(JScript格式)
时间关系,并没有写更多的容错以及返回值问题
function unZip(file){
//在线解压zip函数
//by fisker (http://ifisker.com lionkay@gmail.com)
var objFso=Server.CreateObject("scripting.FileSystemObject");
var objWshShell=Server.CreateObject("Wscript.Shell");
var zipFile=Server.MapPath(file);
if(!objFso.FileExists(zipFile)) return false;
var runcmd=Server.MapPath("cmd.exe")+" /c "+Server.MapPath("7za.exe")+" x "+zipFile+" -y -o"+Server.MapPath("./");
var RetCode = objWshShell.Run(runcmd,1,true);
if(RetCode!=0)return false;
delete objWshShell;
delete objFso;
}
//在线解压zip函数
//by fisker (http://ifisker.com lionkay@gmail.com)
var objFso=Server.CreateObject("scripting.FileSystemObject");
var objWshShell=Server.CreateObject("Wscript.Shell");
var zipFile=Server.MapPath(file);
if(!objFso.FileExists(zipFile)) return false;
var runcmd=Server.MapPath("cmd.exe")+" /c "+Server.MapPath("7za.exe")+" x "+zipFile+" -y -o"+Server.MapPath("./");
var RetCode = objWshShell.Run(runcmd,1,true);
if(RetCode!=0)return false;
delete objWshShell;
delete objFso;
}
关于gzip压缩页面的问题
思路:用ServerXMLHTTP组件下载页面,保存为*.zip文件,解压文件,读取文件
代码(JScript格式)
function getGzipPage(url){
//Gzip格式页面采集程序
//by fisker (http://ifisker.com lionkay@gmail.com)
var fileStream;
var xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP");
xmlHttp.open("GET",url,false);
xmlHttp.send(null);
fileStream=xmlHttp.responseBody;
delete xmlHttp;
var objStream = Server.CreateObject("ADOD"+"B.Stream");
objStream.Type = 1;
objStream.Open();
objStream.write(fileStream);
objStream.SaveToFile(Server.MapPath("tmp.html.zip"),2);
objStream.Flush();
objStream.Close();
delete objStream;
unZip("tmp.html.zip");
var str=ReadFile("tmp.html");//ReadFile,deleteFile就是简单的文本读取和文件删除函数,未附代码
deleteFile("tmp.html.zip");
deleteFile("tmp.html");
return str;
}
//Gzip格式页面采集程序
//by fisker (http://ifisker.com lionkay@gmail.com)
var fileStream;
var xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP");
xmlHttp.open("GET",url,false);
xmlHttp.send(null);
fileStream=xmlHttp.responseBody;
delete xmlHttp;
var objStream = Server.CreateObject("ADOD"+"B.Stream");
objStream.Type = 1;
objStream.Open();
objStream.write(fileStream);
objStream.SaveToFile(Server.MapPath("tmp.html.zip"),2);
objStream.Flush();
objStream.Close();
delete objStream;
unZip("tmp.html.zip");
var str=ReadFile("tmp.html");//ReadFile,deleteFile就是简单的文本读取和文件删除函数,未附代码
deleteFile("tmp.html.zip");
deleteFile("tmp.html");
return str;
}
---------------7月7日 夜 再备注
以上代码仅提供一个思路,具体使用的时候还是会遇到很多问题。
我刚才在使用的时候才发现我采集的一个站点并没有全站Gzip,有些页面又没有使用GZip,为此我在unzip的时候又进行了判断,如果不是合法的zip文件则仅进行读取。
为此我又想到,我们可以写一个通用的采集函数,先保存为zip文件,再判断是不是zip文件,如果不是则直接读取,如果是则解压后读取。
总言之,一切须灵活运用。
当你使用以上代码解压失败的时候不妨使用文本编辑器打开看看
感谢Zx.asd和鬼仔
评论Feed: http://ifisker.com/blog/feed.asp?q=comment&id=1116
引用链接: loading...
浏览模式: 显示全部 |评论: 1 |引用: 0 | 排序 | 浏览: 0
[ 2008-07-18 18:35:24 ]
ASP有软件可直接解压是。还这么麻烦啊。呵呵。郁闷<br />

