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;}}
}
}