后台文章编辑下载远程图片为本地图片
2013-05-07 15:38
274 查看
后台文章编辑下载远程图片为本地图片
在后台涉及到有文章编辑的功能中,为了方便编辑使用,我们需要增加一个可以直接从别的网站拷贝过来保存的功能。这里面主要的是图片的处理问题,因为图片是别网站上的链接,这样的话就必须要换成自己本地的图片路径,这样的话就需要做一些处理才行。
我的思路大概如下:(如果您有更好的想法,欢迎后面留言拍砖,谢绝人身攻击~~)
1、增加一个可以下载远程图片的选择
2、如果用户有勾选这个功能,就根据获取的文章内容,然后通过正则表达式获取所有img的src值组
3、循环整个src值组,如果其中有本地图片路径就不去下载,如果没有就去下载这个远程图片到本地
4、第3步中,在下载远程图片获取本地地址后,替换这个src中的值为下载后返回的图片路径
通过上面4个步骤就可以把整个文章内容的图片替换为自己本地下载后的路径,其中主要的2个步骤其实就是遇到不是本地图片路径的就去下载到本地,然后根据下载后返回的图片路径替换之前的图片路径。说了这么多,还是直接上代码为好(下面代码在实际项目中运行良好)
通过上面2个方法就可以把从别处网站拷贝过来的文章(包含图片的)直接用到自己网站上了,也不用担心图片链接的问题了,虽然这个做法有点不道德,但我们只是讨论技术,这个就暂时不在我的考虑范围之中了。
在后台涉及到有文章编辑的功能中,为了方便编辑使用,我们需要增加一个可以直接从别的网站拷贝过来保存的功能。这里面主要的是图片的处理问题,因为图片是别网站上的链接,这样的话就必须要换成自己本地的图片路径,这样的话就需要做一些处理才行。
我的思路大概如下:(如果您有更好的想法,欢迎后面留言拍砖,谢绝人身攻击~~)
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个方法就可以把从别处网站拷贝过来的文章(包含图片的)直接用到自己网站上了,也不用担心图片链接的问题了,虽然这个做法有点不道德,但我们只是讨论技术,这个就暂时不在我的考虑范围之中了。
相关文章推荐
- php正则匹配文章中的远程图片地址并下载图片到本地
- php正则匹配文章中的远程图片地址并下载图片到本地
- php正则匹配文章中的远程图片地址并下载图片至本地
- php正则匹配文章中的远程图片地址并下载图片至本地
- php正则匹配文章中的远程图片地址并下载图片到本地
- php下载远程图片到本地
- 微信文章图片防盗链,下载到本地
- ASP.NET下载远程图片保存到本地的方法、保存抓取远程图片
- 使用ThinkPHP自带的Http类下载远程图片到本地
- nginx-lua-openresty-graphicsmagick 下载远程图片,本地缩图红缓存加水印
- ASP.NET下载远程图片保存到本地的方法、保存抓取远程图片
- java下载远程http地址的图片文件到本地-自动处理图片是否经过服务器gzip压缩的问题
- php将远程图片下载到本地
- php 替换文章中的图片路径,下载图片到本地服务器
- DEDE不能远程保存(下载)图片到本地的解决方法
- 发布文章“下载远程图片”,缩略图片在限制尺寸之内
- 编辑文章时怎么让 远程保存图片自动打勾?
- php完美实现下载远程图片保存到本地(保存微信头像)
- PHP通过url下载远程图片到本地
- PHP 文章中的远程图片采集到本地的代码