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 积分,解读结果公开显示在下面。

还没有人解读过这个文件。