asp下载

来源:专题 时间:2018-07-08 18:00:05 阅读:

【www.zhuodaoren.com--专题】

asp下载篇(1):asp源码:ASP编写网页中所有资源的程序


ASP网免费发布asp源码:ASP编写网页中所有资源的程序,更多asp源码相关信息请访问ASP网。

  看过一篇关于下载网页中图片的文章,它只能下载以http头的图片,我做了些改进,可以下载网页中的所有连接资源,并按照网页中的目录结构建立本地目录,存放资源。
  download.asp?url=你要下载的网页
  download.asp代码如下:
<%  Server.ScriptTimeout=9999  function SaveToFile(from,tofile)   on error resume next  dim geturl,objStream,imgs   geturl=trim(from)   Mybyval=getHTTPstr(geturl)   Set objStream = Server.CreateObject("ADODB.Stream")   objStream.Type =1   objStream.Open   objstream.write Mybyval  objstream.SaveToFile tofile,2   objstream.Close()   set objstream=nothing   if err.number<>0 then err.Clear   end function
function geturlencodel(byval url)"中文文件名转换   Dim i,code   geturlencodel=""   if trim(Url)="" then exit function   for i=1 to len(Url)   code=Asc(mid(Url,i,1))   if code<0 Then code = code + 65536   If code>255 Then   geturlencodel=geturlencodel&"%"&Left(Hex(Code),2)&"%"&Right(Hex(Code),2)   else   geturlencodel=geturlencodel&mid(Url,i,1)   end if   next   end function   function getHTTPPage(url)   on error resume next   dim http   set http=Server.createobject("Msxml2.XMLHTTP")   Http.open "GET",url,false   Http.send()   if Http.readystate<>4 then exit function   getHTTPPage=bytes2BSTR(Http.responseBody)   set http=nothing   if err.number<>0 then err.Clear   end function
Function bytes2BSTR(vIn)   dim strReturn   dim i,ThisCharCode,NextCharCode   strReturn = ""   For i = 1 To LenB(vIn)   ThisCharCode = AscB(MidB(vIn,i,1))   If ThisCharCode < &H80 Then   strReturn = strReturn & Chr(ThisCharCode)   Else   NextCharCode = AscB(MidB(vIn,i+1,1))   strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))   i = i + 1   End If   Next   bytes2BSTR = strReturn   End Function
function getFileName(byval filename)   if instr(filename,"/")>0 then  fileExt_a=split(filename,"/")   getFileName=lcase(fileExt_a(ubound(fileExt_a)))   if instr(getFileName,"?")>0 then  getFileName=left(getFileName,instr(getFileName,"?")-1)  end if  else  getFileName=filename  end if  end function
function getHTTPstr(url)   on error resume next   dim http   set http=server.createobject("MSXML2.XMLHTTP")   Http.open "GET",url,false   Http.send()   if Http.readystate<>4 then exit function   getHTTPstr=Http.responseBody   set http=nothing   if err.number<>0 then err.Clear   end function
  Function CreateDIR(ByVal LocalPath) "建立目录的程序,如果有多级目录,则一级一级的创建   On Error Resume Next   LocalPath = Replace(LocalPath, "\", "/")   Set FileObject = server.CreateObject("Scripting.FileSystemObject")   patharr = Split(LocalPath, "/")   path_level = UBound(patharr)   For I = 0 To path_level   If I = 0 Then pathtmp = patharr(0) & "/" Else pathtmp = pathtmp & patharr(I) & "/"   cpath = Left(pathtmp, Len(pathtmp) - 1)   If Not FileObject.FolderExists(cpath) Then FileObject.CreateFolder cpath   Next   Set FileObject = Nothing   If Err.Number <> 0 Then   CreateDIR = False   Err.Clear   Else   CreateDIR = True   End If   End Function
function GetfileExt(byval filename)   fileExt_a=split(filename,".")   GetfileExt=lcase(fileExt_a(ubound(fileExt_a)))   end function
function getvirtual(str,path,urlhead)  if left(str,7)="http://" then  url=str  elseif left(str,1)="/" then  start=instrRev(str,"/")  if start=1 then  url="/"  else  url=left(str,start)  end if  url=urlhead&url  elseif left(str,3)="../" then  str1=mid(str,inStrRev(str,"../")+2)  ar=split(str,"../")  lv=ubound(ar)+1  ar=split(path,"/")  url="/"  for i=1 to (ubound(ar)-lv)  url=url&ar(i)  next  url=url&str1  url=urlhead&url  else  url=urlhead&str  end if  getvirtual=url  end function  "示例代码  dim dlpath
virtual="/downweb/"  truepath=server.MapPath(virtual)  if request("url")<> "" then  url=request("url")  fn=getFileName(url)  urlhead=left(url,(instr(replace(url,"//",""),"/")+1))  urlpath=replace(left(url,instrRev(url,"/")),urlhead,"")  strContent = getHTTPPage(url)  mystr=strContent  Set objRegExp = New Regexp   objRegExp.IgnoreCase = True   objRegExp.Global = True   objRegExp.Pattern = "(src|href)=.[^\>]+? "  Set Matches =objRegExp.Execute(strContent)   For Each Match in Matches   str=Match.Value  str=replace(str,"src=","")  str=replace(str,"href=","")  str=replace(str,"""","")  str=replace(str,""","")  filename=GetfileName(str)  getRet=getVirtual(str,urlpath,urlhead)  temp=Replace(getRet,"//","**")  start=instr(temp,"/")  endt=instrRev(temp,"/")-start+1  if start>0 then  repl=virtual&mid(temp,start)&" "  "response.Write repl&"<br>"  mystr=Replace(mystr,str,repl)
  dir=mid(temp,start,endt)  temp=truepath&Replace(dir,"/","\")  CreateDir(temp)  "response.Write getRet&"||"&temp&filename&"<br><br>"  SaveToFile getRet,temp&filename  end if  Next   set Matches=nothing  end if
%>

asp下载篇(2):asp教程:ASP编写网页中所有资源的原代码


ASP网免费发布asp教程:ASP编写网页中所有资源的原代码,更多asp教程相关信息请访问ASP网。

  看过一篇关于下载网页中图片的文章,它只能下载以http头的图片,我做了些改进,可以下载网页中的所有连接资源,并按照网页中的目录结构建立本地目录,存放资源。
  download.asp?url=你要下载的网页
  download.asp代码如下:
<%  Server.ScriptTimeout=9999  function SaveToFile(from,tofile)   on error resume next  dim geturl,objStream,imgs   geturl=trim(from)   Mybyval=getHTTPstr(geturl)   Set objStream = Server.CreateObject("ADODB.Stream")   objStream.Type =1   objStream.Open   objstream.write Mybyval  objstream.SaveToFile tofile,2   objstream.Close()   set objstream=nothing   if err.number<>0 then err.Clear   end function
function geturlencodel(byval url)"中文文件名转换   Dim i,code   geturlencodel=""   if trim(Url)="" then exit function   for i=1 to len(Url)   code=Asc(mid(Url,i,1))   if code<0 Then code = code + 65536   If code>255 Then   geturlencodel=geturlencodel&"%"&Left(Hex(Code),2)&"%"&Right(Hex(Code),2)   else   geturlencodel=geturlencodel&mid(Url,i,1)   end if   next   end function   function getHTTPPage(url)   on error resume next   dim http   set http=Server.createobject("Msxml2.XMLHTTP")   Http.open "GET",url,false   Http.send()   if Http.readystate<>4 then exit function   getHTTPPage=bytes2BSTR(Http.responseBody)   set http=nothing   if err.number<>0 then err.Clear   end function
Function bytes2BSTR(vIn)   dim strReturn   dim i,ThisCharCode,NextCharCode   strReturn = ""   For i = 1 To LenB(vIn)   ThisCharCode = AscB(MidB(vIn,i,1))   If ThisCharCode < &H80 Then   strReturn = strReturn & Chr(ThisCharCode)   Else   NextCharCode = AscB(MidB(vIn,i+1,1))   strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))   i = i + 1   End If   Next   bytes2BSTR = strReturn   End Function
function getFileName(byval filename)   if instr(filename,"/")>0 then  fileExt_a=split(filename,"/")   getFileName=lcase(fileExt_a(ubound(fileExt_a)))   if instr(getFileName,"?")>0 then  getFileName=left(getFileName,instr(getFileName,"?")-1)  end if  else  getFileName=filename  end if  end function
function getHTTPstr(url)   on error resume next   dim http   set http=server.createobject("MSXML2.XMLHTTP")   Http.open "GET",url,false   Http.send()   if Http.readystate<>4 then exit function   getHTTPstr=Http.responseBody   set http=nothing   if err.number<>0 then err.Clear   end function
  Function CreateDIR(ByVal LocalPath) "建立目录的程序,如果有多级目录,则一级一级的创建   On Error Resume Next   LocalPath = Replace(LocalPath, "\", "/")   Set FileObject = server.CreateObject("Scripting.FileSystemObject")   patharr = Split(LocalPath, "/")   path_level = UBound(patharr)   For I = 0 To path_level   If I = 0 Then pathtmp = patharr(0) & "/" Else pathtmp = pathtmp & patharr(I) & "/"   cpath = Left(pathtmp, Len(pathtmp) - 1)   If Not FileObject.FolderExists(cpath) Then FileObject.CreateFolder cpath   Next   Set FileObject = Nothing   If Err.Number <> 0 Then   CreateDIR = False   Err.Clear   Else   CreateDIR = True   End If   End Function
function GetfileExt(byval filename)   fileExt_a=split(filename,".")   GetfileExt=lcase(fileExt_a(ubound(fileExt_a)))   end function
function getvirtual(str,path,urlhead)  if left(str,7)="http://" then  url=str  elseif left(str,1)="/" then  start=instrRev(str,"/")  if start=1 then  url="/"  else  url=left(str,start)  end if  url=urlhead&url  elseif left(str,3)="../" then  str1=mid(str,inStrRev(str,"../")+2)  ar=split(str,"../")  lv=ubound(ar)+1  ar=split(path,"/")  url="/"  for i=1 to (ubound(ar)-lv)  url=url&ar(i)  next  url=url&str1  url=urlhead&url  else  url=urlhead&str  end if  getvirtual=url  end function  "示例代码  dim dlpath
virtual="/downweb/"  truepath=server.MapPath(virtual)  if request("url")<> "" then  url=request("url")  fn=getFileName(url)  urlhead=left(url,(instr(replace(url,"//",""),"/")+1))  urlpath=replace(left(url,instrRev(url,"/")),urlhead,"")  strContent = getHTTPPage(url)  mystr=strContent  Set objRegExp = New Regexp   objRegExp.IgnoreCase = True   objRegExp.Global = True   objRegExp.Pattern = "(src|href)=.[^\>]+? "  Set Matches =objRegExp.Execute(strContent)   For Each Match in Matches   str=Match.Value  str=replace(str,"src=","")  str=replace(str,"href=","")  str=replace(str,"""","")  str=replace(str,""","")  filename=GetfileName(str)  getRet=getVirtual(str,urlpath,urlhead)  temp=Replace(getRet,"//","**")  start=instr(temp,"/")  endt=instrRev(temp,"/")-start+1  if start>0 then  repl=virtual&mid(temp,start)&" "  "response.Write repl&"<br>"  mystr=Replace(mystr,str,repl)
  dir=mid(temp,start,endt)  temp=truepath&Replace(dir,"/","\")  CreateDir(temp)  "response.Write getRet&"||"&temp&filename&"<br><br>"  SaveToFile getRet,temp&filename  end if  Next   set Matches=nothing  end if
%>

asp下载篇(3):asp.net源码:ASP.NET数据绑定代码


.NET网免费发布asp.net源码:ASP.NET数据绑定代码,更多asp.net源码:ASP.NET数据绑定代码相关信息请访问ASP.NET网。

  数据绑定似乎是ASP.NET老掉牙的东西了。可是你知道吗,只需要一点小小的改动就可以替换Eval,摆脱字符串依赖并且大大提高性能。
  首先在code behind中加入以下方法
  protected virtual object ExpHelper<TEntity, TREsult>(Func<TEntity, TREsult> func){ var itm =GetDataItem(); return func((TEntity)itm);}这段代码就是最核心的秘诀了,你完全可以忽视它到底在做什么。其实就是截获每一个被绑定的数据项,并进行强类型转换。
  假设我们定义了学生类
  public class Student{ public string Name { get; set; } public int Age { get; set; }}如果希望在页面中使用强类型访问学生类而不是用Eval,定义专门访问学生的方法
  protected object Stu<TResult>(Func<Student, TResult> func){ return ExpHelper<Student, TResult>(func);}大功告成,于是在页面里我们就能这样绑定数据了
  <ul><asp:Repeater ID="rptStudents" runat="server"><ItemTemplate> <li><%#Stu(_=>_.Name + "(" +_.Age+")")%></li></ItemTemplate></asp:Repeater></ul>这样做有四大优势
  得到编译时检测
  享受智能提示
  强类型转换比Eval反射性能更高
  页面中的表示更丰富,如上我们可以自由拼接想要的字符串,非常像MVC
  更神奇的是可以支持多层嵌套哦。比如我们定义学生的集合Group类和访问器,然后就能用嵌套的Repeater显示分组信息了。完整程序如下
  <%@ Page Language="C#" AutoEventWireup="true"%><script runat="server"> public class Student { public string Name { get; set; } public int Age { get; set; } } public class Group { public IEnumerable<Student> Students { get; set; } } protected void Page_Load(object sender, EventArgs e) { //一群学生 var students = new[] { new Student{Name="mike",Age=23}, new Student{Name="jane", Age=12}, new Student{Name="frank",Age=25}, new Student{Name="susan",Age=32}, }; rptStudents.DataSource = students; //分两组 var group0 = new Group(); group0.Students = students.Take(2); var group1 = new Group(); group1.Students = students.Skip(2).Take(2); rptGroups.DataSource = new[] { group0, group1 }; DataBind(); } protected virtual object ExpHelper<TEntity, TREsult>(Func<TEntity, TREsult> func) { var itm = GetDataItem(); return func((TEntity)itm); } //Student访问器 protected object Stu<TResult>(Func<Student, TResult> func) { return ExpHelper<Student, TResult>(func); } //Group访问器 protected object Grp<TResult>(Func<Group, TResult> func) { return ExpHelper<Group, TResult>(func); }</script><!DOCTYPE html><html><body> <%--单层--%> <ul> <asp:Repeater ID="rptStudents" runat="server"> <ItemTemplate> <li><%#Stu(_=>_.Name + "(" +_.Age+")")%></li> </ItemTemplate> </asp:Repeater> </ul> <%--嵌套--%> <ul> <asp:Repeater ID="rptGroups" runat="server"> <ItemTemplate> <li> <ol> <asp:Repeater ID="Repeater1" runat="server" DataSource="<%#Grp(_=>_.Students) %>"> <ItemTemplate> <li><%#Stu(_=>_.Name + "(" +_.Age+")")%></li> </ItemTemplate> </asp:Repeater> </ol> </li> </ItemTemplate> </asp:Repeater> </ul></body></html>PS
  本文是我以前写的没有发表的小发明,现在拿出来晒,主要是因为这个方法好像知道的人很少。希望大家能帮助测试一下性能,如果觉得合适大可以运用到实际工作中。
  
  更新:
  感谢Dacey 韦恩卑鄙 dudu老大等人的建议
  我已添加了扩展方法版本。喜欢扩展方法这种空降兵的感觉。
  现在只要添加一个static的帮助类,名字随你喜欢
  public static class Helper{ static object ExpHelper<TEntity, TResult>(Page page, Func<TEntity, TResult> func) { var itm = page.GetDataItem(); return func((TEntity)itm); } public static object Eval<T>(this Page page, Func<T, object> func) { return ExpHelper<T, object>(page, func); }}在页面中就可以
  <%#this.Eval<Student>(_ => _.Name + "(" + _.Age + ")")%>注意this是必须的
  扩展方法具有很好的粘合性
  不需要一个父类定义通用方法
  泛型提供多个副本并且容易看清类型
  另外能很好的支持refactor,大家试试用ctrl+r+r改属性名

本文来源:http://www.zhuodaoren.com/shenghuo785145/

推荐访问:asp类下载
扩展阅读文章
热门阅读文章