|
1、首先建立三个文件
Caiji.aspx--------------------进行采集的主页面 Loading.aspx---------------执行程序的页面 Loading2.aspx-------------显示进度
2、下面这两个页面的前台页面什么也不要写,因为要接收ajax的指令来进行操作。
Loading.aspx.cs
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls;
using System.IO; using System.Net; using System.Text;
namespace MyTest.CaiJi { /**//// <summary> /// 执行远程获取文件--prosurfer /// </summary> ///QQ影院 http://ww.qqvod.cn public partial class Loading : System.Web.UI.Page { public static string reAllListHtml, reAllHtml, htmlAddress; public static string RelativeWay, RootWay, htmlListLu; //public static ArrayList alist;//地址列表 public static int getSavedNum, Allcount;
protected void Page_Load(object sender, EventArgs e) { //int reint = (int)((SaveCount / AllCount) * 100); //Random rnd = new Random();rnd.Next(0, 100) //Response.Write(reint); string s_flash_add = "", type = "0"; getSavedNum = 0; if (Request.Params["address"] != null) { s_flash_add = Request.Params["address"].ToString(); } else { Response.Write("错误!"); } if (Request.Params["type"] != null) { type = Request.Params["type"].ToString(); } if (type == "1") { //Response.Write("0"); char[] c1 ={ ',' }; ArrayList alist = StringSplitString(s_flash_add, c1); Allcount = alist.Count; getSavedNum = 0; for (int i = 0; i < alist.Count; i++) { getflash(alist[i].ToString()); getSavedNum += 1; } //getSavedNum = 0; } else { int reint = (int)((getSavedNum / Allcount) * 100); Response.Write(reint); } }
/**//*****************/
public static ArrayList StringSplitString(string strList, char[] splitchar) { ArrayList alist = new ArrayList(); string[] strs = null; if (strList != null && strList != "") { strs = strList.Split(splitchar); } if (strs.Length > 0) { for (int i = 0; i < strs.Length; i++) { alist.Add(strs[i]); } return alist; } return null; }
public void getflash(string flashaddress) { bool isSave = false; if (flashaddress != null) { //flashAddress = Tohttp(flashAddress); isSave = SaveFileFromUrl(flashaddress); }
//if (isSave) // Label1.Text += url + "成功!<br />"; //else // Label1.Text += url + "失败!<br />"; }
/**//// <summary> /// 从文件地址下载文件到本地磁盘--prosurfer /// </summary> /// <param name="Url">文件网址</param> /// <returns></returns> public bool SaveFileFromUrl(string Url) { if (Url.IndexOf(".") == -1) return false; string fileExt = Url.Substring(Url.LastIndexOf(".") + 1); bool Value = false; WebResponse response = null; Stream stream = null;
try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
response = request.GetResponse(); stream = response.GetResponseStream();
if (!response.ContentType.ToLower().StartsWith("text/")) { Value = SaveBinaryFile("flashsrc", fileExt, response); }
} catch (Exception err) { string aa = err.ToString(); } return Value; }
/**//// <summary> /// 将二进制文件保存到磁盘--prosurfer /// </summary> /// <param name="fileDirectory">保存的目录flashsrc</param> /// <param name="fileNameExt">保存的类型</param> /// <param name="response">网络响应</param> /// <returns></returns> private bool SaveBinaryFile(string fileDirectory, string fileNameExt, WebResponse response) { bool Value = true; byte[] buffer = new byte[1024]; string dirpath = Server.MapPath(fileDirectory + "/"); if (Directory.Exists(dirpath) == false) { Directory.CreateDirectory(dirpath); } try { string FileName = dirpath + GetUniquelyString() + "." + fileNameExt; if (File.Exists(FileName)) File.Delete(FileName); Stream outStream = System.IO.File.Create(FileName); Stream inStream = response.GetResponseStream();
int l; do { l = inStream.Read(buffer, 0, buffer.Length); if (l > 0) outStream.Write(buffer, 0, l); } while (l > 0);
outStream.Close(); inStream.Close(); } catch { Value = false; } return Value; }
/**//// <summary> /// 获取一个不重复的文件名--prosurfer /// </summary> /// <returns></returns> public static string GetUniquelyString() { const int RANDOM_MAX_VALUE = 1000; string strTemp, strYear, strMonth, strDay, strHour, strMinute, strSecond, strMillisecond; Random rnd = new Random(); DateTime dt = DateTime.Now; int rndNumber = rnd.Next(RANDOM_MAX_VALUE); strYear = YieldRandNum(5); strMonth = (dt.Month > 9) ? dt.Month.ToString() : "i" + dt.Month.ToString(); strDay = (dt.Day > 9) ? dt.Day.ToString() : "a" + dt.Day.ToString(); strHour = (dt.Hour > 9) ? dt.Hour.ToString() : "n" + dt.Hour.ToString(); strMinute = (dt.Minute > 9) ? dt.Minute.ToString() : "j" + dt.Minute.ToString(); strSecond = (dt.Second > 9) ? dt.Second.ToString() : "n" + dt.Second.ToString(); strMillisecond = dt.Millisecond.ToString();
strTemp = strYear + strDay + strMonth + strHour + strMinute + strSecond + strMillisecond + rndNumber.ToString(); strTemp = strTemp.Replace("1", "q");
return strTemp;
}
/**//// <summary> /// 产生随机字母--prosurfer /// </summary> /// <param name="d"></param> /// <returns></returns> public static string YieldRandNum(int d) { char[] seed ={ 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'G', 'h', 'H', 'i', 'j', 'J', 'k', 'K', 'L', 'm', 'M', 'n', 'N', 'p', 'P', 'q', 'Q', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z' }; int seed_count = seed.Length; Random rand = new Random(); StringBuilder sb = new StringBuilder(4); for (int i = 0; i < d; i++) sb.Append(seed[rand.Next(0, seed_count)]); return sb.ToString(); }
/**//***************************************/
} }
Loading2.aspx.cs
public partial class Loading2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Loading.Allcount != 0) { double red = Loading.getSavedNum * 100 / Loading.Allcount; Response.Write(Convert.ToInt32(red)); } else { Response.Write("1"); } }
}
在Caiji.aspx前台加上
function gid(id) { return document.getElementById?document.getElementById(id):null; } var xmlHttp1,xmlHttp2; function createXMLHttpRequest() { if (window.ActiveXObject) { xmlHttp1 = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp1 = new XMLHttpRequest(); } } function createXMLHttpRequest2() { if (window.ActiveXObject) { xmlHttp2 = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp2 = new XMLHttpRequest(); } } //上传操作 function pollServer(type) { yincang(); createXMLHttpRequest(); pollServer2(); var flashs = document.getElementById("flashAll").value; data = "address="+flashs+"&type="+type; var url = "Loading.aspx"; xmlHttp1.open("POST", url, true); xmlHttp1.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xmlHttp1.send(data); } //获取进度 function pollServer2() { createXMLHttpRequest2(); var url = "Loading2.aspx"; xmlHttp2.open("POST", url, true); xmlHttp2.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xmlHttp2.onreadystatechange = pollCallback2; xmlHttp2.send(null); } //传送过程返回 function pollCallback2() { if (xmlHttp2.readyState == 4) { if (xmlHttp2.status == 200) { var percent_complete = xmlHttp2.responseText; var progress = document.getElementById("progress"); var progressPersent = document.getElementById("progressPersent"); progress.style.width = percent_complete + "%"; progressPersent.innerHTML = percent_complete + "%"; if (percent_complete < 100) { setTimeout("pollServer2()", 3000); } else { document.getElementById("complete").innerHTML = "已生成完成!";
} } }
} function yincang() { var s = gid("start"); s.removeChild(s.childNodes[0]); } function clearBar() { var progress_bar = document.getElementById("progressBar"); var progressPersent = document.getElementById("progressPersent"); var complete = document.getElementById("complete"); progress_bar.style.visibility = "visible" progressPersent.innerHTML = " "; complete.innerHTML = "开始生成!"; } function next() { __doPostBack('Go',''); }
在正文内<textarea id="flashAll" name="flashAll" cols="200" rows="20"><%=reflashaddresses%></textarea><br /> <form id="form1" runat="server" > <div>结果:<asp:Label ID="Label1" runat="server" Text=""></asp:Label><br /> 获取列表页面:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="下一步" OnClick="Button1_Click" /> <asp:Panel runat="server" ID="Panel1" Visible="false"> 开始循环标记:<asp:TextBox Text="" TextMode="MultiLine" runat="server" ID="TextBox2"></asp:TextBox><br /> 结束循环结束:<asp:TextBox Text="" TextMode="MultiLine" runat="server" ID="TextBox3"></asp:TextBox><br /> <asp:Button ID="Button3" runat="server" Text="下一步" OnClick="Button3_Click" /> </asp:Panel> <asp:Panel runat="server" ID="StringDo" Visible="false"> 开始标记:<asp:TextBox Text="" TextMode="MultiLine" runat="server" ID="StartUrlString"></asp:TextBox><br /> 结束标记:<asp:TextBox Text="" TextMode="MultiLine" runat="server" ID="EndUrlString"></asp:TextBox><br /> <a href="javascript:next();">启 动</a> <asp:LinkButton ID="Go" runat="server" OnClick="Go_Click"></asp:LinkButton> </asp:Panel> <br /><span id="start"><a href="javascript:pollServer(1);">生成</a> </span> </div> </form>
<div id="progressBar" style="padding:0px;border:solid black 0px;visibility:hidden"> <table width="300" border="0" cellspacing="0" cellpadding="0" align="center" > <tr> <td align="center" id="progressPersent" >0%</td> </tr> <tr > <td> <table width="100%" border="1" cellspacing="0" cellpadding="0" bordercolor="#000000"> <tr> <td> <table width="1%" border="0" cellspacing="0" cellpadding="0" bgcolor="#FF0000" id="progress" height="20"> <tr> <td> </td> </tr> </table></td> </tr> </table> </td> </tr> <tr> <td align="center" id="complete"></td> </tr> </table> </div> <script type="text/javascript"> clearBar(); </script> <iframe src="Loading.aspx" frameborder="0" scrolling="no" style="display:none;"></iframe> 正文后台
public static string reAllListHtml,reAllHtml,htmlAddress,flashAddress; public static string RelativeWay, RootWay, htmlListLu; public static ArrayList alist;//地址列表 public static int getSavedNum;
public static string reflashaddresses ; protected void Page_Load(object sender, EventArgs e) { getSavedNum = 0; reflashaddresses = ""; } void f() { }
protected void Button1_Click(object sender, EventArgs e) { htmlAddress = TextBox1.Text.Trim().ToLower();
RelativeWay = htmlAddress.Substring(0, htmlAddress.LastIndexOf("/")) + "/";//相对路径 RootWay = htmlAddress.Substring(0, htmlAddress.IndexOf("/", 7)) + "/";//根路径
reAllListHtml = GetPageHTML(htmlAddress); Panel1.Visible = true; } public static string Tohttp(string str) { if (str.StartsWith("/")) str = RootWay + str; if (!str.StartsWith("http://")) str = RelativeWay + str; return str; }
protected void Button3_Click(object sender, EventArgs e) { string starstr = TextBox2.Text.Trim(); string endstr = TextBox3.Text.Trim(); alist = Get_fileAddresss(starstr, endstr, reAllListHtml); Panel1.Visible = false; StringDo.Visible = true; }
protected void Go_Click(object sender, EventArgs e) { string str = ""; string starstr = StartUrlString.Text.Trim(); string endstr = EndUrlString.Text.Trim(); for (int i = 0; i < alist.Count; i++) { reAllHtml = GetPageHTML(alist[i].ToString()); flashAddress = Get_fileAddress(starstr, endstr, reAllHtml); str += flashAddress + ","; } reflashaddresses = str; Response.Write(reflashaddresses); }
public static string Get_fileAddress(string startstr, string endstr, string strResult) { String temp = ""; int start, stop;
start = strResult.IndexOf(startstr, 0, strResult.Length); stop = strResult.IndexOf(endstr, 0, strResult.Length); if (start == -1 || stop == -1) return null; temp = strResult.Substring(start + startstr.Length, stop - start - startstr.Length); return temp; }
public static ArrayList Get_fileAddresss(string startstr, string endstr, string strResult) { ArrayList list = new ArrayList(); int start = 0, stop = 0; while (start != -1 && stop != -1) { start = strResult.IndexOf(startstr, 0, strResult.Length); if (start == -1) break; strResult = strResult.Substring(start + startstr.Length); stop = strResult.IndexOf(endstr, 0, strResult.Length); if (stop == -1) break; string tempaddress = strResult.Substring(0, stop); tempaddress = Tohttp(tempaddress); list.Add(tempaddress); strResult = strResult.Substring(stop); }
return list; }
本文来源:IT传媒网 原文链接:http://www.cniter.com/asp.net-caiji-ajax-tech-10896-1/
|