使用ASP.NET抓取远程图片保存到本地,是个不错的主意,这样图片的访问速度就快,以下是本站原创的保存远程图片到本地的函数,支持.bmp,.jpg,.jpeg,.gif,.png等格式的远程图片。
源代码如下:
导入命名空间
using System.Net;
using System.IO;
using System.Drawing.Imaging;
/// <summary>
/// 下载远程图片保存到本地
/// </summary>
/// <param name="savedir">本地保存路径</param>
/// <param name="imgpath">远程图片文件</param>
/// <returns></returns>
public string downRemoteImg(string savedir,string imgpath)
{
if (string.IsNullOrEmpty(imgpath))
return string.Empty;
else
{
string imgName = string.Empty;
string imgExt = string.Empty;
string saveFilePath = string.Empty;
imgName = imgpath.Substring(imgpath.LastIndexOf("/"), imgpath.Length - imgpath.LastIndexOf("/"));
imgExt = imgpath.Substring(imgpath.LastIndexOf("."), imgpath.Length - imgpath.LastIndexOf("."));
saveFilePath = Server.MapPath(savedir);
if (!Directory.Exists(saveFilePath))
Directory.CreateDirectory(saveFilePath);
try
{
WebRequest wreq = WebRequest.Create(imgpath);
wreq.Timeout = 10000;
HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse();
Stream s = wresp.GetResponseStream();
System.Drawing.Image img;
img = System.Drawing.Image.FromStream(s);
switch (imgExt.ToLower())
{
case ".gif":
img.Save(saveFilePath + imgName, ImageFormat.Gif);
break;
case ".jpg":
case ".jpeg":
img.Save(saveFilePath + imgName, ImageFormat.Jpeg);
break;
case ".png":
img.Save(saveFilePath + imgName, ImageFormat.Png);
break;
case ".icon":
img.Save(saveFilePath + imgName, ImageFormat.Icon);
break;
case ".bmp":
img.Save(saveFilePath + imgName, ImageFormat.Bmp);
break;
}
img.Dispose();
s.Dispose();
return savedir + imgName;
}
catch
{
return imgpath;
}
}
}
使用方法:
如保存到本地的test目录:
Response.Write(this.downRemoteImg("test", "http://www.xueit.com/ads/top760.gif"));