/// <summary> /// Gets the new output MetaFile object. /// </summary> public CMSOutputMetaFile NewOutputFile() { CMSOutputMetaFile mf = new CMSOutputMetaFile(); mf.Watermark = Watermark; mf.WatermarkPosition = WatermarkPosition; return(mf); }
/// <summary> /// Gets the new output MetaFile object. /// </summary> /// <param name="mfi">Meta file info</param> /// <param name="data">Output MetaFile data</param> public CMSOutputMetaFile NewOutputFile(MetaFileInfo mfi, byte[] data) { CMSOutputMetaFile mf = new CMSOutputMetaFile(mfi, data); mf.Watermark = Watermark; mf.WatermarkPosition = WatermarkPosition; return(mf); }
/// <summary> /// Sets the last modified and expires header to the response /// </summary> /// <param name="file">Output file data</param> private void SetTimeStamps(CMSOutputMetaFile file) { DateTime expires = DateTime.Now; // Send last modified header to allow client caching Response.Cache.SetLastModified(file.LastModified); Response.Cache.SetCacheability(HttpCacheability.Public); if (AllowClientCache) { expires = DateTime.Now.AddMinutes(ClientCacheMinutes); } Response.Cache.SetExpires(expires); }
/// <summary> /// Gets the ETag for the given file /// </summary> /// <param name="file">File</param> private static string GetFileETag(CMSOutputMetaFile file) { // Prepare etag string etag = null; if (file.MetaFile != null) { etag += file.MetaFile.MetaFileID; } etag += "|" + file.LastModified; // Put etag into "" etag = "\"" + etag + "\""; return(etag); }
/// <summary> /// Processes the file. /// </summary> protected void ProcessFile() { outputFile = null; // Get file GUID from querystring fileGuid = QueryHelper.GetGuid("fileguid", Guid.Empty); if (fileGuid == Guid.Empty) { // Get file GUID from context fileGuid = ValidationHelper.GetGuid(Context.Items["fileguid"], Guid.Empty); } if (fileGuid != Guid.Empty) { ProcessFile(fileGuid); } }
/// <summary> /// Sets content type of the response based on file MIME type /// </summary> /// <param name="file">Output file</param> private void SetResponseContentType(CMSOutputMetaFile file) { string mimeType = file.MimeType; if (file.MetaFile != null) { string extension = file.MetaFile.MetaFileExtension; switch (extension.ToLowerCSafe()) { case ".flv": // Correct MIME type mimeType = "video/x-flv"; break; } } // Set content type Response.ContentType = mimeType; }
/// <summary> /// Processes the specified file. /// </summary> /// <param name="fileGuid">File guid</param> protected void ProcessFile(Guid fileGuid) { // Get the file MetaFileInfo fileInfo = MetaFileInfoProvider.GetMetaFileInfoWithoutBinary(fileGuid, CurrentSiteName, true); if (fileInfo != null) { bool resizeImage = (ImageHelper.IsImage(fileInfo.MetaFileExtension) && MetaFileInfoProvider.CanResizeImage(fileInfo, Width, Height, MaxSideSize)); // Get the data if ((outputFile == null) || (outputFile.MetaFile == null)) { outputFile = NewOutputFile(fileInfo, null); outputFile.Width = Width; outputFile.Height = Height; outputFile.MaxSideSize = MaxSideSize; outputFile.Resized = resizeImage; } } }
/// <summary> /// Ensures the physical file. /// </summary> /// <param name="file">Output file</param> public bool EnsurePhysicalFile(CMSOutputMetaFile file) { if (file == null) { return false; } // Try to link to file system if (String.IsNullOrEmpty(file.Watermark) && (file.MetaFile != null) && (file.MetaFile.MetaFileID > 0) && MetaFileInfoProvider.StoreFilesInFileSystem(file.SiteName)) { string filePath = MetaFileInfoProvider.EnsurePhysicalFile(file.MetaFile, file.SiteName); if (filePath != null) { if (file.Resized) { // If resized, ensure the thumbnail file if (MetaFileInfoProvider.GenerateThumbnails(file.SiteName)) { filePath = MetaFileInfoProvider.EnsureThumbnailFile(file.MetaFile, file.SiteName, Width, Height, MaxSideSize); if (filePath != null) { // Link to the physical file file.PhysicalFile = filePath; return true; } } } else { // Link to the physical file file.PhysicalFile = filePath; return false; } } } file.PhysicalFile = ""; return false; }
/// <summary> /// Ensures the physical file. /// </summary> /// <param name="file">Output file</param> public bool EnsurePhysicalFile(CMSOutputMetaFile file) { if (file == null) { return(false); } // Try to link to file system if (String.IsNullOrEmpty(file.Watermark) && (file.MetaFile != null) && (file.MetaFile.MetaFileID > 0) && MetaFileInfoProvider.StoreFilesInFileSystem(file.SiteName)) { string filePath = MetaFileInfoProvider.EnsurePhysicalFile(file.MetaFile, file.SiteName); if (filePath != null) { if (file.Resized) { // If resized, ensure the thumbnail file if (MetaFileInfoProvider.GenerateThumbnails(file.SiteName)) { filePath = MetaFileInfoProvider.EnsureThumbnailFile(file.MetaFile, file.SiteName, Width, Height, MaxSideSize); if (filePath != null) { // Link to the physical file file.PhysicalFile = filePath; return(true); } } } else { // Link to the physical file file.PhysicalFile = filePath; return(false); } } } file.PhysicalFile = ""; return(false); }
/// <summary> /// Processes the file. /// </summary> protected void ProcessFile() { outputFile = null; // Get file GUID from querystring fileGuid = QueryHelper.GetGuid("fileguid", Guid.Empty); if (fileGuid == Guid.Empty) { // Get file GUID from context fileGuid = ValidationHelper.GetGuid(Context.Items["fileguid"], Guid.Empty); } if (fileGuid == Guid.Empty) { return; } // Get the file var fileInfo = MetaFileInfoProvider.GetMetaFileInfoWithoutBinary(fileGuid, CurrentSiteName, true); if (fileInfo == null) { return; } bool resizeImage = (ImageHelper.IsImage(fileInfo.MetaFileExtension) && MetaFileInfoProvider.CanResizeImage(fileInfo, Width, Height, MaxSideSize)); // Get the data if ((outputFile == null) || (outputFile.MetaFile == null)) { outputFile = NewOutputFile(fileInfo, null); outputFile.Width = Width; outputFile.Height = Height; outputFile.MaxSideSize = MaxSideSize; outputFile.Resized = resizeImage; } }
/// <summary> /// Processes the specified file. /// </summary> /// <param name="fileGuid">File guid</param> protected void ProcessFile(Guid fileGuid) { // Get the file MetaFileInfo fileInfo = MetaFileInfoProvider.GetMetaFileInfoWithoutBinary(fileGuid, CurrentSiteName, true); if (fileInfo != null) { bool resizeImage = (ImageHelper.IsImage(fileInfo.MetaFileExtension) && MetaFileInfoProvider.CanResizeImage(fileInfo, this.Width, this.Height, this.MaxSideSize)); // Get the data if ((outputFile == null) || (outputFile.MetaFile == null)) { outputFile = NewOutputFile(fileInfo, null); outputFile.Width = this.Width; outputFile.Height = this.Height; outputFile.MaxSideSize = this.MaxSideSize; outputFile.Resized = resizeImage; } } }
/// <summary> /// Sets the last modified and expires header to the response /// </summary> /// <param name="file">Output file data</param> private void SetTimeStamps(CMSOutputMetaFile file) { DateTime expires = DateTime.Now; // Send last modified header to allow client caching Response.Cache.SetLastModified(file.LastModified); Response.Cache.SetCacheability(HttpCacheability.Public); if (AllowClientCache) { expires = DateTime.Now.AddMinutes(this.ClientCacheMinutes); } Response.Cache.SetExpires(expires); }
/// <summary> /// Sends the given file within response. /// </summary> /// <param name="file">File to send</param> protected void SendFile(CMSOutputMetaFile file) { // Clear response. CookieHelper.ClearResponseCookies(); Response.Clear(); // Set the revalidation SetRevalidation(); // Send the file if (file != null) { // Redirect if the file should be redirected if (file.RedirectTo != "") { URLHelper.Redirect(file.RedirectTo, true, this.CurrentSiteName); } // Prepare etag string etag = null; if (file.MetaFile != null) { etag += file.MetaFile.MetaFileID; } // Put etag into "" etag = "\"" + etag + "\""; // Client caching - only on the live site if (useClientCache && AllowCache && AllowClientCache && ETagsMatch(etag, file.LastModified)) { // Set the file time stamps to allow client caching SetTimeStamps(file); RespondNotModified(etag, true); return; } // If physical file not present, try to load if (file.PhysicalFile == null) { EnsurePhysicalFile(outputFile); } // If the output data should be cached, return the output data bool cacheOutputData = false; if ((this.CacheMinutes > 0) && (file.MetaFile != null)) { cacheOutputData = CacheHelper.CacheImageAllowed(CurrentSiteName, file.MetaFile.MetaFileSize); } // Ensure the file data if physical file not present if (!file.DataLoaded && (file.PhysicalFile == "")) { byte[] cachedData = GetCachedOutputData(); if (file.EnsureData(cachedData)) { if ((cachedData == null) && cacheOutputData) { SaveOutputDataToCache(file.OutputData, GetOutputDataDependency(file.MetaFile)); } } } // Send the file if ((file.OutputData != null) || (file.PhysicalFile != "")) { // Setup the mime type - Fix the special types string mimetype = file.MimeType; string extension = file.MetaFile.MetaFileExtension; switch (extension.ToLower()) { case ".flv": mimetype = "video/x-flv"; break; } // Prepare response Response.ContentType = mimetype; SetDisposition(file.MetaFile.MetaFileName, extension); // Setup Etag property ETag = etag; // Set if resumable downloads should be supported AcceptRange = !IsExtensionExcludedFromRanges(extension); if (useClientCache && AllowCache) { // Set the file time stamps to allow client caching SetTimeStamps(file); Response.Cache.SetETag(etag); } // Add the file data if ((file.PhysicalFile != "") && (file.OutputData == null)) { // 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(CMSOutputMetaFile file) { // Clear response. CookieHelper.ClearResponseCookies(); Response.Clear(); // Set the revalidation SetRevalidation(); // Send the file if (file != null) { // Redirect if the file should be redirected if (file.RedirectTo != "") { URLHelper.RedirectPermanent(file.RedirectTo, CurrentSiteName); } string etag = GetFileETag(file); // Client caching - only on the live site if (useClientCache && AllowCache && AllowClientCache && ETagsMatch(etag, file.LastModified)) { // Set correct response content type SetResponseContentType(file); // Set the file time stamps to allow client caching SetTimeStamps(file); RespondNotModified(etag, true); return; } // If physical file not present, try to load if (file.PhysicalFile == null) { EnsurePhysicalFile(outputFile); } // If the output data should be cached, return the output data bool cacheOutputData = false; if ((CacheMinutes > 0) && (file.MetaFile != null)) { cacheOutputData = CacheHelper.CacheImageAllowed(CurrentSiteName, file.MetaFile.MetaFileSize); } // Ensure the file data if physical file not present if (!file.DataLoaded && (file.PhysicalFile == "")) { byte[] cachedData = GetCachedOutputData(); if (file.EnsureData(cachedData)) { if ((cachedData == null) && cacheOutputData) { SaveOutputDataToCache(file.OutputData, GetOutputDataDependency(file.MetaFile)); } } } // Send the file if ((file.OutputData != null) || (file.PhysicalFile != "")) { // Set correct response content type SetResponseContentType(file); string extension = file.MetaFile.MetaFileExtension; SetDisposition(file.MetaFile.MetaFileName, extension); // Setup Etag property ETag = etag; // Set if resumable downloads should be supported AcceptRange = !IsExtensionExcludedFromRanges(extension); if (useClientCache && AllowCache) { // Set the file time stamps to allow client caching SetTimeStamps(file); 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 { // 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> /// Gets the new output MetaFile object. /// </summary> public CMSOutputMetaFile NewOutputFile() { CMSOutputMetaFile mf = new CMSOutputMetaFile(); mf.Watermark = Watermark; mf.WatermarkPosition = WatermarkPosition; return mf; }
/// <summary> /// Gets the new output MetaFile object. /// </summary> /// <param name="mfi">Meta file info</param> /// <param name="data">Output MetaFile data</param> public CMSOutputMetaFile NewOutputFile(MetaFileInfo mfi, byte[] data) { CMSOutputMetaFile mf = new CMSOutputMetaFile(mfi, data); mf.Watermark = Watermark; mf.WatermarkPosition = WatermarkPosition; return mf; }
/// <summary> /// Processes the file. /// </summary> protected void ProcessFile() { outputFile = null; // Get file GUID from querystring this.fileGuid = QueryHelper.GetGuid("fileguid", Guid.Empty); if (this.fileGuid == Guid.Empty) { // Get file GUID from context this.fileGuid = ValidationHelper.GetGuid(this.Context.Items["fileguid"], Guid.Empty); } if (this.fileGuid != Guid.Empty) { ProcessFile(this.fileGuid); } }
/// <summary> /// Gets the ETag for the given file /// </summary> /// <param name="file">File</param> private static string GetFileETag(CMSOutputMetaFile file) { // Prepare etag string etag = null; if (file.MetaFile != null) { etag += file.MetaFile.MetaFileID; } etag += "|" + file.LastModified; // Put etag into "" etag = "\"" + etag + "\""; return etag; }
/// <summary> /// Sends the given file within response. /// </summary> /// <param name="file">File to send</param> protected void SendFile(CMSOutputMetaFile file) { // Clear response. CookieHelper.ClearResponseCookies(); Response.Clear(); // Set the revalidation SetRevalidation(); // Send the file if (file != null) { // Redirect if the file should be redirected if (file.RedirectTo != "") { URLHelper.RedirectPermanent(file.RedirectTo, CurrentSiteName); } string etag = GetFileETag(file); // Client caching - only on the live site if (useClientCache && AllowCache && AllowClientCache && ETagsMatch(etag, file.LastModified)) { // Set correct response content type SetResponseContentType(file); // Set the file time stamps to allow client caching SetTimeStamps(file.LastModified); RespondNotModified(etag); return; } // If physical file not present, try to load if (file.PhysicalFile == null) { EnsurePhysicalFile(outputFile); } // If the output data should be cached, return the output data bool cacheOutputData = false; if ((CacheMinutes > 0) && (file.MetaFile != null)) { cacheOutputData = CacheHelper.CacheImageAllowed(CurrentSiteName, file.MetaFile.MetaFileSize); } // Ensure the file data if physical file not present if (!file.DataLoaded && (file.PhysicalFile == "")) { byte[] cachedData = GetCachedOutputData(); if (file.EnsureData(cachedData)) { if ((cachedData == null) && cacheOutputData) { SaveOutputDataToCache(file.OutputData, GetOutputDataDependency(file.MetaFile)); } } } // Send the file if ((file.MetaFile != null) && ((file.OutputData != null) || (file.PhysicalFile != ""))) { // Set correct response content type SetResponseContentType(file); string extension = file.MetaFile.MetaFileExtension; SetDisposition(file.MetaFile.MetaFileName, extension); // Setup Etag property ETag = etag; // Set if resumable downloads should be supported AcceptRange = !IsExtensionExcludedFromRanges(extension); if (useClientCache && AllowCache) { // Set the file time stamps to allow client caching 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 { // 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(); }