GMS.Core.Upload/ThumbnailHandler.cs
(开头部分) 5KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web;
using GMS.Framework.Utility;
using GMS.Core.Config;
namespace GMS.Core.Upload
{
/// <summary>
/// 对按需(OnDemand)生成的图片进行拦截生成缩略图
/// </summary>
public class ThumbnailHandler : IHttpHandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
//如果304已缓存了,则返回
if (!String.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"]))
{
context.Response.StatusCode = 304;
context.Response.StatusDescription = "Not Modified";
return;
}
var path = context.Request.CurrentExecutionFilePath;
if (!path.EndsWith(".axd") && !path.StartsWith("/Upload", StringComparison.OrdinalIgnoreCase))
return;
//正则从Url里匹配出上传的文件夹目录.....
var m = Regex.Match(path, @"upload/(.+)/(day_\d+)/thumb/(\d+)_(\d+)_(\d+)\.([A-Za-z]+)\.axd$", RegexOptions.IgnoreCase);
if (!m.Success)
return;
var folder = m.Groups[1].Value;
var subFolder = m.Groups[2].Value;
var fileName = m.Groups[3].Value;
var width = m.Groups[4].Value;
var height = m.Groups[5].Value;
var ext = m.Groups[6].Value;
//如果在配置找不到需要按需生成的,则返回,这样能防止任何人随便敲个尺寸就生成
string key = string.Format("{0}_{1}_{2}", folder, width, height).ToLower();
bool isOnDemandSize = UploadConfigContext.ThumbnailConfigDic.ContainsKey(key) && UploadConfigContext.ThumbnailConfigDic[key].Timming == Timming.OnDemand;
if (!isOnDemandSize)
return;
var thumbnailFilePath = string.Format(@"{0}\{1}\Thumb\{2}_{4}_{5}.{3}", folder, subFolder, fileName, ext, width, height);
thumbnailFilePath = Path.Combine(UploadConfigContext.UploadPath, thumbnailFilePath);
后面还有 73 行代码,购买后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
