asp.net 원격 그림 저장 코드

3887 단어
주의: CSS의 이미지 수집이 이루어지지 않았고 이미지의 정규는 아직 보완되어야 한다.
 
  
using System;
using System.Data;
using System.Configuration;
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.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;

///
///
///

public class caiji
{
public caiji()
{
//
// TODO:
//
}

///
///
///

/// url
///
public static string caijiByUrl(string url,string chargest,string path)
{
string str = GetSourceTextByUrl(url,chargest);

ArrayList lib = new ArrayList();

int i = 0;
// url
Uri uri = new Uri(url);

//Scheme , http,Host
string baseurl = uri.Scheme + "://" + uri.Host + "/";

// url, src
//\S
Regex g = new Regex(@"(src=(""|\')\S+\.(gif|jpg|png|bmp)(""|\'))", RegexOptions.Multiline | RegexOptions.IgnoreCase);

MatchCollection m = g.Matches(str);

foreach (Match math in m)
{
// , , , , .asp,.aspx ,
string imgUrl = math.Groups[0].Value.ToLower();// ,=

// src ,
imgUrl = imgUrl.Replace("src","");
imgUrl = imgUrl.Replace("\"","");
imgUrl = imgUrl.Replace("'","");
imgUrl = imgUrl.Replace("=","");
imgUrl = imgUrl.Trim();

//
if (imgUrl.Substring(0, 4) != "http")
{
//
if (imgUrl.Substring(0, 1) == "/")
{
imgUrl = baseurl + imgUrl;
}
else
{
imgUrl = url.Substring(0,url.LastIndexOf("/") + 1) + imgUrl;
}
}

// ,-1
if (lib.IndexOf(imgUrl) == -1)
{
lib.Add(imgUrl);
}
}

string str_ = string.Empty;
WebClient client = new WebClient();

for (int j = 0; j < lib.Count; j++)
{
string savepath = path + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Minute + DateTime.Now.Second + j + lib[j].ToString().Substring((lib[j].ToString().Length) -4,4);
try
{
client.DownloadFile(new Uri(lib[j].ToString()), savepath);
str_ += lib[j].ToString() + "
:" + savepath + "

";
}
catch (Exception e)
{
str_ += e.Message;
}

}

return str_;
}

public static string GetSourceTextByUrl(string url,string chargest)
{
WebRequest request = WebRequest.Create(url);
request.Timeout = 20000;//20
WebResponse response = request.GetResponse();

Stream resStream = response.GetResponseStream();
StreamReader sr = new StreamReader(resStream,Encoding.GetEncoding(chargest));
return sr.ReadToEnd();
}
}

사용: 예를 들어 업로드 폴더에 저장한 경우:
 
  
string path = Server.MapPath("~/upload/");
Response.Write(caiji.caijiByUrl(//www.jb51.net, "utf-8", path));

좋은 웹페이지 즐겨찾기