您的位置:首页 > 其它

后台文章编辑下载远程图片为本地图片

2013-05-07 15:38 274 查看
后台文章编辑下载远程图片为本地图片
在后台涉及到有文章编辑的功能中,为了方便编辑使用,我们需要增加一个可以直接从别的网站拷贝过来保存的功能。这里面主要的是图片的处理问题,因为图片是别网站上的链接,这样的话就必须要换成自己本地的图片路径,这样的话就需要做一些处理才行。
我的思路大概如下:(如果您有更好的想法,欢迎后面留言拍砖,谢绝人身攻击~~)
1、增加一个可以下载远程图片的选择
2、如果用户有勾选这个功能,就根据获取的文章内容,然后通过正则表达式获取所有img的src值组
3、循环整个src值组,如果其中有本地图片路径就不去下载,如果没有就去下载这个远程图片到本地
4、第3步中,在下载远程图片获取本地地址后,替换这个src中的值为下载后返回的图片路径
通过上面4个步骤就可以把整个文章内容的图片替换为自己本地下载后的路径,其中主要的2个步骤其实就是遇到不是本地图片路径的就去下载到本地,然后根据下载后返回的图片路径替换之前的图片路径。说了这么多,还是直接上代码为好(下面代码在实际项目中运行良好)
private string ArticleContentChange(string articleContent)
{
string Pattern_url = @"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>";//匹配所有的img标签
Regex reg_url = new Regex(Pattern_url, RegexOptions.IgnoreCase);
MatchCollection colMatch_url = reg_url.Matches(articleContent);
if (colMatch_url.Count > 0)
{
List<string> list = new List<string>();
foreach (Match match_url in colMatch_url)
{
string imgurl = match_url.Groups["imgUrl"].Value;//获取src中值
if (!imgurl.StartsWith("你要存储的本地图片地址", true, null))//这里只是做一个是否里面包含一些本地图片路径(具体情况根据个人项目不同)
{
string downloadimgurl = downloadImgFromUrl(imgurl);//下载远程图片
articleContent = articleContent.Replace(imgurl, downloadimgurl);
}
}
}
return articleContent;
}
private string downloadImgFromUrl(string imgurl, Article a)
{
WebClient wc = new WebClient();
if (!wc.IsBusy)
{
string url ="你要存储的本地图片路径";
try
{
byte[] bytes = wc.DownloadData(new Uri(imgurl, UriKind.RelativeOrAbsolute));
MemoryStream ms = new MemoryStream(bytes);
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
img.Save(Server.MapPath(url), ImageFormat.Jpeg);
}
catch (Exception)
{
wc.Dispose();
}
finally
{
wc.Dispose();
}
return url;
}
else
return "";
}

通过上面2个方法就可以把从别处网站拷贝过来的文章(包含图片的)直接用到自己网站上了,也不用担心图片链接的问题了,虽然这个做法有点不道德,但我们只是讨论技术,这个就暂时不在我的考虑范围之中了。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: