/// <summary>处理</summary> /// <param name="context"></param> protected virtual void OnProcess(HttpContext context) { var attachment = GetAttachment(); if (attachment == null || !attachment.IsEnable || !File.Exists(attachment.FullFilePath)) { OnNotFound(context); return; } // 增加统计 attachment.Increment(null); // 检查浏览器缓存 var wd = new WebDownload(); wd.ModifyTime = attachment.UploadTime; if (wd.CheckCache()) { return; } var stream = GetStream(context, attachment); if (stream.CanSeek && stream.Position >= stream.Length) { stream.Position = 0; } try { OnResponse(context, attachment, stream, null); } catch (Exception ex) { XTrace.WriteException(ex); } finally { // 关闭文件流 if (stream is FileStream) { stream.Close(); } } }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); AvatarSize avatarSize; switch (DNTRequest.GetString("size").ToLower()) { case "large": avatarSize = AvatarSize.Large; break; case "medium": avatarSize = AvatarSize.Medium; break; case "small": avatarSize = AvatarSize.Small; break; default: avatarSize = AvatarSize.Medium; break; } var uid = DNTRequest.GetInt("uid"); // 如果物理文件存在,直接返回 var fi = Avatars.GetPhysicsAvatarPath(uid + "", avatarSize); // 如果没有缓存,文件也不在,那么直接返回默认 if (!File.Exists(fi)) { fi = Utils.GetMapPath(BaseConfigs.GetForumPath.CombinePath("avatars/avatar_" + avatarSize.ToString().ToLower() + ".jpg")); } if (File.Exists(fi)) { var ci = GetData(fi); // 检查缓存是否有效 var wd = new WebDownload(); wd.BrowserCache = true; wd.ModifyTime = ci.ModifyTime; if (wd.CheckCache()) { return; } wd.Stream = new MemoryStream(ci.Data); //wd.Mode = WebDownload.DispositionMode.Inline; wd.ContentType = "image/" + Path.GetExtension(fi).TrimStart('.'); // 启用浏览器缓存 wd.BrowserCache = true; wd.Speed = 0; wd.Render(); return; } //var avatarUrl = Avatars.GetAvatarUrl(uid + "", avatarSize); //XTrace.WriteLine("头像{0}未取到,跳转地址 {1}", fi, avatarUrl); //HttpContext.Current.Response.Redirect(avatarUrl); }