using System; using System.Collections.Generic; using System.Web; using System.IO; namespace Mtxfw.VipSite { public class GetFiles : IHttpHandler { //参数列表:附件ID,缩略图大小,缩略图质量 // aid itsize itql //sample GetFiles.aspx?image=2009\8\29\090829235E70C09C1A31427DBF837E4C01847FA8.jpg&itsize=100x100&itql=80 Mtxfw.Utility.Config config = new Mtxfw.Utility.Config(""); Mtxfw.Utility.QueryString Query = new Mtxfw.Utility.QueryString(); public void ProcessRequest(HttpContext context) { string filepath = ""; string f = Query.Get("f", ""); if (f != "") { filepath = Path.Combine(config.webUpPath, f); } else { filepath = GetFullFilePathByPath(); } SendFile(HttpContext.Current.Server.MapPath(filepath)); } protected void SendFile(string AFileName) { if (AFileName == "") { System.Web.HttpContext.Current.Response.Clear(); System.Web.HttpContext.Current.Response.Write("   ERROR
文件不存在或已被删除! "); System.Web.HttpContext.Current.Response.End(); return; } System.Web.HttpContext.Current.Response.Clear(); SetContentType(AFileName); try { System.Web.HttpContext.Current.Response.WriteFile(AFileName); } catch { } System.Web.HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddDays(7)); System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public); System.Web.HttpContext.Current.Response.End(); } /// /// 设置输出类型 /// /// protected void SetContentType(string fullfilepath) { string extFileName = Path.GetExtension(fullfilepath); string contentType = "image/jpeg"; switch (extFileName.Trim().ToLower()) { case ".jpg": contentType = "image/jpeg"; break; case ".png": contentType = "image/png"; break; case ".gif": contentType = "image/gif"; break; case ".bmp": contentType = "image/bmp"; break; case ".tif": contentType = "image/tiff"; break; } System.Web.HttpContext.Current.Response.ContentType = contentType; } /// /// 检查是否存在该尺寸的缩略图 /// /// /// /// protected string CheckRequestSizeIsExists(string itsize, string filepath) { string _path = Path.Combine(config.webUpPath, itsize); if (filepath.IndexOf("/Files/grimage/") == -1) { _path = Path.Combine(_path, filepath); } else { _path = _path.Replace("\\", "/") + filepath; } if (File.Exists(HttpContext.Current.Server.MapPath(_path))) { return _path; } else { return ""; } } /// /// 获取输出的文件路径 /// /// protected string GetFullFilePathByPath() { string _filepath = ""; string ate_FilePath = Query.Get("image", ""); //判断记录是否存在 if (ate_FilePath != "") { //_filepath = Path.Combine(HttpContext.Current.Server.MapPath(config.webWatemarkUrl), ate_FilePath); _filepath = Path.Combine(config.webUpPath, _filepath); if (!File.Exists(HttpContext.Current.Server.MapPath(_filepath))) //水印图不存在,获取原图 { _filepath = ate_FilePath; _filepath = Path.Combine(config.webUpPath, _filepath); } //需要缩略图 string itsize = Query.Get("itsize", ""); if (Mtxfw.Utility.Common.Is_ThumbNail_AllowSizes(itsize)) //是否为允许的尺寸 { //获取已存在的缩略图 string existfilepath = CheckRequestSizeIsExists(itsize, ate_FilePath); //没有该尺寸已生成好的图,创建缩略图 if (existfilepath == "") { int itql = Query.Get("itql", int.Parse(config.webWatemarkQuality)); string[] width_height = itsize.Split('x'); string saveFilePath = Path.Combine(config.webUpPath, itsize); if (ate_FilePath.IndexOf("/Files/grimage/") == -1) { saveFilePath = Path.Combine(saveFilePath, ate_FilePath); } else { saveFilePath = saveFilePath.Replace("\\", "/") + ate_FilePath; } string savepath = Path.GetDirectoryName(saveFilePath); if (!Directory.Exists(HttpContext.Current.Server.MapPath(savepath))) { Directory.CreateDirectory(HttpContext.Current.Server.MapPath(savepath)); } string oriFilePath = ate_FilePath; oriFilePath = Path.Combine(config.webUpPath, oriFilePath); Mtxfw.Utility.ImageManager.CutForCustom(HttpContext.Current.Server.MapPath(oriFilePath), HttpContext.Current.Server.MapPath(saveFilePath), Int32.Parse(width_height[0]), Int32.Parse(width_height[1]), itql); return saveFilePath; //返回新生成的缩位图 } else { return existfilepath; //返回已生成的缩位图 } } } return _filepath; //返回原始图片 } public bool IsReusable{get{return false;}} } }