Asp.net 删除新闻同时删除图片设计思想
最近遇到一个问题,在做新闻发布功能的时候会出现图文混排的现象,但当删除新闻的时候并没有同时删除该新闻中的图片,因为大多数的HTML编辑器都仅仅支持上传图片,好的能够支持浏览服务器图片,但效果都不佳,那么有什么方法能够取出新闻中的图片,然后可以根据这些图片做“文章”呢?
通过资料搜集,自己总结出一套思想,仅供参考,如下:
首先设计新闻表(我只挑重点字段),id、title、Details、PublishTime、PublishMan、NewsImg(这个字段就是记录该条新闻中的图片的,字段长度要长一些,因为记录的是图片的完整url,当然你可以仅仅保存图片的名字,但这种情况在某种情况下会出现图片不能显示的后果)
好数据库设计好了,然后就是怎么去图片了,我这里用正则表达式来取。
//返回新闻中的所有图片,用|隔开 public string MyGetImgUrl(string text) { StringBuilder str = new StringBuilder(); string pat = @"<img\s+[^>]*\s*src\s*=\s*([']?)(?<url>\S+)'?[^>]*>"; Regex r = new Regex(pat, RegexOptions.Compiled); Match m = r.Match(text.ToLower()); while (m.Success) { Group g = m.Groups[2]; str.Append(g).Append("|");//g就是图片的完整url m = m.NextMatch(); } return str.ToString().Replace("\"", "").TrimEnd('|'); } //插入新闻 protected void Button1_Click(object sender, EventArgs e) { CJ_DBOperater.CJ.sqlconn_str = "server=localhost;database=PicLinkToNews;uid=sa;pwd=ovenjackchain"; string str = "insert into news values('{0}','{1}','{2}','{3}','{4}')"; //TxtContent.Text就是获得HTML编辑器的内容,他是HTML格式的 CJ_DBOperater.CJ.SQL_ExecuteNonQuery(string.Format(str, TxtTitle.Text, TxtContent.Text, DateTime.Now.ToString(), "admin", MyGetImgUrl(this.TxtContent.Text))); //插入成功 }
到这里就OK了,我们已经插入了一条新闻,并且把这条新闻里的图片URL取出放到NewsImgs字段里面了。
那接下来的事情就好办了吧。
例如,我想做一个flash图片滚动效果,图片就是新闻图片,点击图片可以跳转到该条新闻,那么这个的重点就是如何取出图片。
很简单了,因为我们已经把图片放到NewsImgs字段里面了,只需要sql语句就完全可以了。
DataTable dt = CJ_DBOperater.CJ.SQL_ReturnDataTable("select top 4 NewsImgs from news where NewsImgs!=''"); for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i][0].ToString().Contains('|')) Response.Write(dt.Rows[i][0].ToString().Substring(0, dt.Rows[i][0].ToString().IndexOf('|')) + "<br />"); else Response.Write(dt.Rows[i][0].ToString()+"<br />"); }
//这里是每条新闻只取第一个图片(如果新闻中有图片的话)
OK了。
图片都取出来了,那么删除新闻同时删除图片就OK了。
当然若您仅仅做删除新闻同时删除图片这个功能是不需要NewsImgs字段也完全可以的。