文件,文章采集+进度条的ajax实现

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>

    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  />
        
< href ="javascript:next();" > 启   动 </ a >     < asp:LinkButton  ID ="Go"  runat ="server"  OnClick ="Go_Click" ></ asp:LinkButton >
        
</ asp:Panel >
        
< br  />< span  id ="start" >< 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;
        }

http://blog.csdn.net/prosurfer
程序有点乱哦,还没好好整理,就晾出来了,不要拍砖哦。带进度条的文件采集程序就可以成功运行了。:)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值