/// <summary> /// Sends the given file within response. /// </summary> /// <param name="file">File to send</param> protected void SendFile(CMSOutputForumAttachment file) { // Clear response. CookieHelper.ClearResponseCookies(); Response.Clear(); // Set the revalidation SetRevalidation(); if (file != null) { // Redirect if the file should be redirected if (file.RedirectTo != "") { URLHelper.RedirectPermanent(file.RedirectTo, CurrentSiteName); } // Prepare etag string etag = file.LastModified.ToString(); // Client caching - only on the live site if (useClientCache && AllowCache && ETagsMatch(etag, file.LastModified)) { // Set correct response content type SetResponseContentType(file); SetTimeStamps(file.LastModified); RespondNotModified(etag); return; } // If physical file not present, try to load if (file.PhysicalFile == null) { EnsurePhysicalFile(outputFile); } // Ensure the file data if physical file not present if (!file.DataLoaded && (file.PhysicalFile == "")) { byte[] cachedData = GetCachedOutputData(); if (file.EnsureData(cachedData)) { if ((cachedData == null) && (CacheMinutes > 0)) { SaveOutputDataToCache(file.OutputData, GetOutputDataDependency(file.ForumAttachment)); } } } // Send the file if ((file.OutputData != null) || (file.PhysicalFile != "")) { // Set correct response content type SetResponseContentType(file); string extension = file.ForumAttachment.AttachmentFileExtension; SetDisposition(file.ForumAttachment.AttachmentFileName, extension); // Set if resumable downloads should be supported AcceptRange = !IsExtensionExcludedFromRanges(extension); if (useClientCache && AllowCache) { SetTimeStamps(file.LastModified); Response.Cache.SetETag(etag); } else { SetCacheability(); } // Add the file data if ((file.PhysicalFile != "") && (file.OutputData == null)) { if (!File.Exists(file.PhysicalFile)) { // File doesn't exist NotFound(); } else { // If the output data should be cached, return the output data bool cacheOutputData = false; if (file.ForumAttachment != null) { cacheOutputData = CacheHelper.CacheImageAllowed(CurrentSiteName, file.ForumAttachment.AttachmentFileSize); } // Stream the file from the file system file.OutputData = WriteFile(file.PhysicalFile, cacheOutputData); } } else { // Use output data of the file in memory if present WriteBytes(file.OutputData); } } else { NotFound(); } } else { NotFound(); } CompleteRequest(); }
/// <summary> /// Sends the given file within response. /// </summary> /// <param name="file">File to send</param> protected void SendFile(CMSOutputForumAttachment file) { // Clear response. CookieHelper.ClearResponseCookies(); Response.Clear(); Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); if (file != null) { // Redirect if the file should be redirected if (file.RedirectTo != "") { URLHelper.Redirect(file.RedirectTo, true, CurrentSiteName); } // Prepare etag string etag = file.LastModified.ToString(); // Client caching - only on the live site if (useClientCache && AllowCache && CacheHelper.CacheImageEnabled(CurrentSiteName) && ETagsMatch(etag, file.LastModified)) { RespondNotModified(etag, true); return; } // If physical file not present, try to load if (file.PhysicalFile == null) { EnsurePhysicalFile(outputFile); } // Ensure the file data if physical file not present if (!file.DataLoaded && (file.PhysicalFile == "")) { byte[] cachedData = GetCachedOutputData(); if (file.EnsureData(cachedData)) { if ((cachedData == null) && (this.CacheMinutes > 0)) { SaveOutputDataToCache(file.OutputData, GetOutputDataDependency(file.ForumAttachment)); } } } // Send the file if ((file.OutputData != null) || (file.PhysicalFile != "")) { // Setup the mime type - Fix the special types string mimetype = file.MimeType; string extension = file.ForumAttachment.AttachmentFileExtension; switch (extension.ToLower()) { case ".flv": mimetype = "video/x-flv"; break; } // Prepare response Response.ContentType = mimetype; SetDisposition(file.ForumAttachment.AttachmentFileName, extension); // Set if resumable downloads should be supported AcceptRange = !IsExtensionExcludedFromRanges(extension); if (useClientCache && AllowCache && (CacheHelper.CacheImageEnabled(CurrentSiteName))) { DateTime expires = DateTime.Now; // Send last modified header to allow client caching Response.Cache.SetLastModified(file.LastModified); Response.Cache.SetCacheability(HttpCacheability.Public); if (DocumentBase.AllowClientCache() && DocumentBase.UseFullClientCache) { expires = DateTime.Now.AddMinutes(CacheHelper.CacheImageMinutes(CurrentSiteName)); } Response.Cache.SetExpires(expires); Response.Cache.SetETag(etag); } // Add the file data if ((file.PhysicalFile != "") && (file.OutputData == null)) { // If the output data should be cached, return the output data bool cacheOutputData = false; if (file.ForumAttachment != null) { cacheOutputData = CacheHelper.CacheImageAllowed(CurrentSiteName, file.ForumAttachment.AttachmentFileSize); } // Stream the file from the file system file.OutputData = WriteFile(file.PhysicalFile, cacheOutputData); } else { // Use output data of the file in memory if present WriteBytes(file.OutputData); } } else { NotFound(); } } else { NotFound(); } CompleteRequest(); //RequestHelper.EndResponse(); }