我用
                mybyte = my.DownloadData(new Uri(Url));
                my.DownloadFileAsync(new Uri(Url));
抓取远程图片到本地.当抓取页面被一个人访问时,一切正常.但是如果有多个人同时访问这个页面时.会造成图片在服务器上反复读写.明明快抓取完了,但是还是会重新从0字节抓取..要怎么解决呢?

解决方案 »

  1.   

    可能是跟服务器有关吧收藏了个看看using System.Text.RegularExpressions;
    using System.Net;
    Pic_Remote("<img src=http://static.tianya.cn/w250/images/20081206/6262712/1228548462160.jpg>") //远程存图
          private string Pic_Remote(string news_Content)
          {
              string htmlStr = news_Content;
              string nowyymm = DateTime.Now.ToString("yyyy-MM");    //当前年月
              string nowdd = DateTime.Now.ToString("dd"); //当天号数
              string path = "images/" + nowyymm + "/" + nowdd;
              Directory.CreateDirectory(Server.MapPath(path));
              string returnValue = "";
              returnValue = SaveUrlPics(htmlStr, path, nowyymm, nowdd);
              return returnValue;
          }      //下载图片到本地
          public string SaveUrlPics(string strHTML, string path, string nowyymm, string nowdd)
          {
              string[] imgurlAry = GetImgTag(strHTML);
              try
              {
                  for (int i = 0; i < imgurlAry.Length; i++)
                  {
                      //WebRequest req = WebRequest.Create(imgurlAry[i]);
                      string preStr = System.DateTime.Now.ToString() + "_";
                      preStr = preStr.Replace("-", "");
                      preStr = preStr.Replace(":", "");
                      preStr = preStr.Replace(" ", "");
                      WebClient wc = new WebClient();
                      wc.DownloadFile(imgurlAry[i], Server.MapPath(path) + "/" + preStr + imgurlAry[i].Substring(imgurlAry[i].LastIndexOf("/") + 1));
                      //替换原图片地址
                      string imgPath = "/Files/Remoteupfile/" + nowyymm + "/" + nowdd;
                      strHTML = strHTML.Replace(imgurlAry[i], imgPath + "/" + preStr + imgurlAry[i].Substring(imgurlAry[i].LastIndexOf("/") + 1));
                  }
              }
              catch (Exception ex)
              {
                  //return ex.Message;
              }
              return strHTML;
          }      //获取图片标志
          private string[] GetImgTag(string htmlStr)
          {
              Regex regObj = new Regex("<img.+?>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
              string[] strAry = new string[regObj.Matches(htmlStr).Count];
              int i = 0;
              foreach (Match matchItem in regObj.Matches(htmlStr))
              {
                  strAry[i] = GetImgUrl(matchItem.Value);
                  i++;
              }
              return strAry;
          }      //获取图片URL地址
          private string GetImgUrl(string imgTagStr)
          {
              string str = "";
              Regex regObj = new Regex("http://.+.(?:jpg|gif|bmp|png)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
              foreach (Match matchItem in regObj.Matches(imgTagStr))
              {
                  str = matchItem.Value;
              }
              return str;
          }
      

  2.   

    你这个和我写的差不多.如何判断APP正在执行.从而拒绝其他人执行app, 只让一个人执行呢?
      

  3.   

    if(文件是否在本地服务器已保存)
    {
        直接显示
    }
    else
    {
       if(抓取的网址在Application变量中不存在)
       {
           将网址存到Application变量
           开始抓取
       }
    }