asp.net文章采集+ajax进度条

goldentime 发表于 2008-2-13 15:43:00

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="/blog/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/



发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:


日  历

栏目分类

最新文章

最新回复

最新留言

用户登陆

博客搜索

博客信息

站内链接


返回页顶
Powered by Oblog.