需求:基于老网站做的新网站,但是老网站上传的附件,特别是图片(照片)都需要继续使用。老网站不下线。两个网站域名不一样。
思路:从数据库取出图片的路径,先判断老网站域名+此图片路径的图片是否存在?如果存在,新网站图片就直接用老网站的地址(老域名+图片路径);如果不存在,就直接加载新网站本地上传的图片。
具体实现大致如下:
using System;
using System.Net;
public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.img.ImageUrl = ImageUrlRoute("https://www.aaa.com/", "upload/img/12345678.png");//图片存在于老网站
//this.img.ImageUrl = ImageUrlRoute("https://www.aaa.com/", "upload/img/87654321.png");//图片不存在于老网站
}
}
/// <summary>
/// 获取远程或者本地的图片
/// </summary>
/// <param name="host">图片所在域名</param>
/// <param name="url">存于数据库中图片的路径</param>
/// <returns></returns>
public string ImageUrlRoute(string host, string url)
{
string fullPath = host + "/" + url;//完整图片路径:域名+图片地址
bool b = CheckUrlError(fullPath);//判断此远程图片是否存在
if (b == true)//存在
{
return fullPath;//返回:域名+图片地址
}
else//不存在
{
return url;//返回本地路径的图片
}
}
//判断远程图片是否存在
public bool CheckUrlError(string curl)
{
int i = GetUrlError(curl);
return i == 200;
}
private int GetUrlError(string curl)
{
int num = 200;//存在就返回:200
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(curl));
ServicePointManager.Expect100Continue = false;
try
{
((HttpWebResponse)request.GetResponse()).Close();
}
catch (WebException exception)
{
if (exception.Status != WebExceptionStatus.ProtocolError)
{
return num;
}
if (exception.Message.IndexOf("500 ") > 0)
{
return 500;
}
if (exception.Message.IndexOf("401 ") > 0)
{
return 401;
}
if (exception.Message.IndexOf("404") > 0)
{
num = 404;
}
}
return num;
}
}
一点说明:
函数方法: private int GetUrlError(string curl) 它不仅能判断图片文件(jpg、gif、bmp、png...)的存在,还能判断其他文件是否存在,如:html、js、css、rar、zip、aspx、doc、xls、ppt等等。