回到目录说在前对于资源列表页来说,我们经常会把图像做成N多种,大图,小图,中图等等,很是麻烦,在数据迁移时,更是一种痛快,而如果你把图像资源部署到nginx上,那么这种图像缩放就变得很容易了,因为它有自己的过滤器来实现这个功能,只要程序员简单的配置即可(GraphicsMagic ...
回到目录
说在前
对于资源列表页来说,我们经常会把图像做成N多种,大图,小图,中图等等,很是麻烦,在数据迁移时,更是一种痛快,而如果你把图像资源部署到nginx上,那么这种图像缩放就变得很容易了,因为它有自己的过滤器来实现这个功能,只要程序员简单的配置即可(GraphicsMagick),其实在nginx上实现缩略图的方式有很多,而对于IIS服务来说,实现这种缩略图就没有直接的方法了,必须开发人员自己写代码来实现,下面解释两个比较早的技术(被执行的期间比较早,在页面渲染之前)HttpModule和httpHandler,这两个东西我在之前的文章中也已经讲过,细节不再重复。[HttpModule几大事件,HttpHandler实现图像防盗链]
做在后
一 HttpModule对URL地址进行重写,将扩展名为jpg,jpeg,png,gif结尾的URL地址进行复写,让它支持漂亮的缩略图参数,如原地址为:new1.jpg,实现缩略图原地址为:new1.jpg?w=100&h=100,进行Url重写后的漂亮地址为:new1_100x100.jpg,怎么样,是否是很漂亮,有点像MVC 的router吧,呵呵
/// <summary> /// 实现URL的重写 /// </summary> public class UrlRewriteModule : IHttpModule { #region IHttpModule 成员 public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(Application_BeginRequest); } /// <summary> /// url重写 /// .png?w=100&h=100 /// _100x100.png /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Application_BeginRequest(Object sender, EventArgs e) { get='_blank'>string oldUrl = HttpContext.Current.Request.RawUrl; if (oldUrl.LastIndexOf(".") > -1) { string ext = oldUrl.Substring(oldUrl.LastIndexOf(".")).ToLower(); //是图像文件 if (ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == "gif") { var param = oldUrl.Substring(oldUrl.LastIndexOf("_") + 1, (oldUrl.IndexOf(".") - oldUrl.LastIndexOf("_") - 1)).Split(new char[] { 'x' }, StringSplitOptions.RemoveEmptyEntries); //有图像缩放请求 if (oldUrl.LastIndexOf("_") > -1) { string newUrl = oldUrl.Substring(0, oldUrl.LastIndexOf("_")); newUrl = string.Format(newUrl + ".png?w={0}&h={1}", param[0], param[1]); //将请求中的URL进行重写 HttpContext.Current.RewritePath(newUrl); } } } } #endregion #region IHttpModule 成员 public void Dispose() { } #endregion }
原标题:我心中的核心组件~HttpHandler和HttpModule实现图像的缩放与Url的重写
关键词:URL
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。