Creating a document link as file.pdf(230kB ) may seem like a simple task…
Well now it is…
My Generic media
public class GenericMedia : MediaData { [CultureSpecific] [Display( Name = "Title-text", Description = "Ange title-text", GroupName = SystemTabNames.Content, Order = 2)] public virtual String Description { get; set; } public virtual string Copyright { get; set; } [Editable(false)] public virtual string FileSize { get; set; } }
Helper to get the file size
public static string GetFileSize(GenericMedia media) { if (media != null) { using (var stream = media.BinaryData.OpenRead()) { return (stream.Length /1024)+ " kB"; } } return string.Empty; }
And som magic sprinkle of events
namespace proj.Business.Initialization { [InitializableModule] [ModuleDependency(typeof (EPiServer.Web.InitializationModule))] public class InitializationModule : IInitializableModule { public void Initialize(InitializationEngine context) { var eventRegistry = ServiceLocator.Current.GetInstance<IContentEvents>(); eventRegistry.CreatingContent += OnCreatingContent; eventRegistry.SavingContent += OnSavingContent; } public void Preload(string[] parameters) { } public void Uninitialize(InitializationEngine context) { var eventRegistry = ServiceLocator.Current.GetInstance<IContentEvents>(); eventRegistry.CreatingContent -= OnCreatingContent; eventRegistry.SavingContent -= OnSavingContent; } private void OnSavingContent(object sender, ContentEventArgs e) { var content = e.Content as GenericMedia; if (content == null) return; var fs = ContentHelpers.GetFileSize(content); content.FileSize = fs; } private static void OnCreatingContent(object sender, ContentEventArgs e) { var content = e.Content as GenericMedia; if (content == null) return; var fs = ContentHelpers.GetFileSize(content); content.FileSize = fs; } } }
Usage
<a title="@content.Description" href="@UrlResolver.Current.GetUrl(content.ContentLink)"> @content.Name (@content.FileSize)</a>
Enjoy!