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

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

    在后台涉及到有文章编辑的功能中,为了方便编辑使用,我们需要增加一个可以直接从别的网站拷贝过来保存的功能。这里面主要的是图片的处理问题,因为图片是别网站上的链接,这样的话就必须要换成自己本地的图片路径,这样的话就需要做一些处理才行。

    我的思路大概如下:(如果您有更好的想法,欢迎后面留言拍砖,谢绝人身攻击~~)

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

       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值