标签:drawing 路径 添加 sts dir 保存 using add str
using System.Drawing; using System.Web; using cczcrv.Web.File.Uploader.Image; using System.IO; namespace cczcrv.Web.File.Filters { public class GetImageHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { //图片不存在,返回默认图片 var path = context.Server.MapPath(context.Request.Url.AbsolutePath); if (!System.IO.File.Exists(path)) { CreateImageResponse(context, ""); return; } int width = 0; var strWidth = context.Request.Params["width"]; if (!string.IsNullOrWhiteSpace(strWidth) && int.TryParse(strWidth, out width)) { var index = path.LastIndexOf(‘\\‘); //缩略图目录不存在,创建目录 var thumbnailDirectory = $"{path.Substring(0, index)}/thumb_{width}"; if (!Directory.Exists(thumbnailDirectory)) { Directory.CreateDirectory(thumbnailDirectory); } var thumbnailPath = $"{thumbnailDirectory}/{path.Substring(index + 1)}"; //缩略图不存在,生成缩略图 if (!System.IO.File.Exists(thumbnailPath)) { var image = Image.FromFile(path); //width大于图片本身宽度,则返回原图 if (width >= image.Width) { CreateImageResponse(context, path); return; } ThumbnailHelper.MakeThumbnail(image, thumbnailPath, width, 100, ThumbnailModel.W); } CreateImageResponse(context, thumbnailPath); return; } CreateImageResponse(context, path); } public bool IsReusable { get { return false; } } #region 私有方法 /// <summary> /// 返回图片 /// </summary> /// <param name="context">当前上下文</param> /// <param name="filePath">图片路径</param> private void CreateImageResponse(HttpContext context, string filePath) { context.Response.ContentType = "image/JPEG"; context.Response.WriteFile(filePath); context.Response.End(); } #endregion } }
<add name="getImage" path="/upload/image/*" verb="GET" type="cczcrv.Web.File.Filters.GetImageHandler" />
运行效果可以通过下面两个链接查看:
原图:http://file.cczcrv.com/upload/image/201612/15/w_1903359727.png
缩略图:http://file.cczcrv.com/upload/image/201612/15/w_1903359727.png?width=100
这个Handler中还可以做很多事情,比如图片防盗链,ip黑名单等等,不过说到底原理只是一个IHttpHandler的应用而已。
标签:drawing 路径 添加 sts dir 保存 using add str
原文地址:http://www.cnblogs.com/liuyh/p/6189464.html