Last active
December 17, 2017 17:20
-
-
Save jammykam/54d6af46593fa3b827b4 to your computer and use it in GitHub Desktop.
Restrict Media Upload in Content Editor in Sitecore 7.2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using LaunchSitecore.Applications; | |
using Sitecore; | |
using Sitecore.Exceptions; | |
using Sitecore.Pipelines.Attach; | |
using System; | |
using System.Collections.Generic; | |
namespace LaunchSitecore.Pipelines.Attach | |
{ | |
public class ImageCheckSize | |
{ | |
public void Process(AttachArgs args) | |
{ | |
if (!ImageSettings.IsRestrictedExtension(args.File.FileName)) | |
return; | |
if (args.MediaItem.FileBased || args.File.InputStream.Length <= ImageSettings.MaxImageSizeInDatabase) | |
return; | |
// Unused, message displayed using Sheer.Alert from AttachPage.cs | |
throw new ClientAlertException(String.Format("The image is too big to be attached. The maximum size of a file that can be uploaded is {0}.", MainUtil.FormatSize(ImageSettings.MaxImageSizeInDatabase))); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8" ?> | |
<xamlControls | |
xmlns:x="http://www.sitecore.net/xaml" | |
xmlns:ajax="http://www.sitecore.net/ajax" | |
xmlns:rest="http://www.sitecore.net/rest" | |
xmlns:javascript="http://www.sitecore.net/javascript" | |
xmlns:r="http://www.sitecore.net/renderings" | |
xmlns:xmlcontrol="http://www.sitecore.net/xmlcontrols" | |
xmlns:p="http://schemas.sitecore.net/Visual-Studio-Intellisense" | |
xmlns:asp="http://www.sitecore.net/microsoft/webcontrols" | |
xmlns:html="http://www.sitecore.net/microsoft/htmlcontrols" | |
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> | |
<!-- place this file in: /sitecore/shell/Applications/FlashUpload/Attach/Attach.xaml.xml --> | |
<Sitecore.Shell.Applications.FlashUpload.Attach x:inherits="LaunchSitecore.Applications.AttachPage,LaunchSitecore"> | |
<Sitecore.Controls.DialogPage Header="Attach a File" Icon="Business/32x32/Paperclip.png" Text="Select a file. When done click the Upload button." OKButton="Upload" runat="server"> | |
<AjaxScriptManager runat="server"/> | |
<ContinuationManager runat="server" /> | |
<Script runat="server" Src="/sitecore/shell/controls/lib/YUIupload/yahoo-dom-event/yahoo-dom-event.js" /> | |
<Script runat="server" Src="/sitecore/shell/controls/lib/YUIupload/element/element-beta-min.js" /> | |
<Script runat="server" Src="/sitecore/shell/controls/lib/YUIupload/uploader/uploader-experimental-min.js" /> | |
<Script runat="server" Src="/sitecore/shell/applications/flashupload/attach/attach.js" /> | |
<Style runat="server"> | |
.filename { | |
height: 22px; | |
width: 100%; | |
border: solid 1px #969696; | |
background: white; | |
margin-right: 4px; | |
position: relative; | |
} | |
#FilenameText { | |
padding: 2px; | |
padding-left: 4px; | |
display: block; | |
} | |
.progress { | |
width: 0%; | |
height: 20px; | |
position: absolute; | |
background: #eaeaea; | |
z-index: -1; | |
} | |
#Browse { | |
margin-left: 4px; | |
} | |
</Style> | |
<html:HtmlInputHidden class="uploadID" id="InputUploadID" runat="server" /> | |
<html:HtmlInputHidden class="uploadSessionID" id="UploadSessionID" runat="server" /> | |
<html:HtmlInputHidden class="uploadSessionID1" id="UploadSessionID1" runat="server" /> | |
<GridPanel runat="server" Width="100%"> | |
<Literal runat="server" Text="Filename:" /> | |
<GridPanel runat="server" Columns="2"> | |
<Border runat="server" class="filename" GridPanel.Width="100%"> | |
<Border runat="server" class="progress" /> | |
<ThemedImage runat="server" Src="People/16x16/clock.png" class="progressImage" style="position: absolute; right: 2px; top: 2px; display: none" /> | |
<ThemedImage runat="server" Src="Applications/16x16/check2.png" class="doneImage" style="position: absolute; right: 2px; top: 2px; display: none" /> | |
<span id="FilenameText"></span> | |
</Border> | |
<Border runat="server" id="BrowseContainer" GridPanel.Width="72px" style="position:relative"> | |
<Button runat="server" Header="Browse" ID="Browse" style="z-index:1"/> | |
<div id="BrowseOverlay" style="width:82px;height:22px;position:absolute;top:0;left:0;z-index:2" /> | |
</Border> | |
</GridPanel> | |
<Literal runat="server" ID="Message" /> | |
</GridPanel> | |
</Sitecore.Controls.DialogPage> | |
</Sitecore.Shell.Applications.FlashUpload.Attach> | |
</xamlControls> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Sitecore; | |
using Sitecore.Diagnostics; | |
using Sitecore.Globalization; | |
using Sitecore.Web.UI.Sheer; | |
namespace LaunchSitecore.Applications | |
{ | |
public class AttachPage : Sitecore.Shell.Applications.FlashUpload.Attach.AttachPage | |
{ | |
protected new void OnQueued(string filename, string lengthString) | |
{ | |
Assert.ArgumentNotNullOrEmpty(filename, "filename"); | |
Assert.ArgumentNotNullOrEmpty(lengthString, "lengthString"); | |
int num = int.Parse(lengthString); | |
long maximumImageUploadSize = ImageSettings.MaxImageSizeInDatabase; | |
if (ImageSettings.IsRestrictedExtension(filename) && num > maximumImageUploadSize) | |
{ | |
string text = Translate.Text("The image \"{0}\" is too big to be uploaded.\n\nThe maximum image size that can be uploaded is {1}.", new object[] { filename, MainUtil.FormatSize(maximumImageUploadSize) }); | |
this.WarningMessage = text; | |
SheerResponse.Alert(text, new string[0]); | |
} | |
else | |
{ | |
base.OnQueued(filename, lengthString); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using LaunchSitecore.Applications; | |
using Sitecore; | |
using Sitecore.Diagnostics; | |
using Sitecore.Pipelines.Upload; | |
using System.Collections.Generic; | |
using System.Web; | |
namespace LaunchSitecore.Pipelines.Upload | |
{ | |
public class ImageCheckSize : UploadProcessor | |
{ | |
public void Process(UploadArgs args) | |
{ | |
Assert.ArgumentNotNull((object) args, "args"); | |
if (args.Destination == UploadDestination.File) | |
return; | |
foreach (string index in args.Files) | |
{ | |
HttpPostedFile file = args.Files[index]; | |
if (!string.IsNullOrEmpty(file.FileName) && ImageSettings.IsRestrictedExtension(file.FileName)) | |
{ | |
if ((long)file.ContentLength > ImageSettings.MaxImageSizeInDatabase) | |
{ | |
// Unused, message displayed using Javascript from MediaFolderForm.cs | |
//HttpContext.Current.Response.Write("<html><head><script type=\"text/JavaScript\" language=\"javascript\">window.top.scForm.getTopModalDialog().frames[0].scForm.postRequest(\"\", \"\", \"\", 'ShowFileTooBig(" +StringUtil.EscapeJavascriptString(file.FileName) + ")')</script></head><body>Done</body></html>"); | |
args.ErrorText = string.Format("The image \"{0}\" is too big to be uploaded. The maximum size for uploading images is {1}.", file.FileName, MainUtil.FormatSize(ImageSettings.MaxImageSizeInDatabase)); | |
Log.Warn(args.ErrorText, this); | |
args.AbortPipeline(); | |
break; | |
} | |
} | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Linq; | |
namespace LaunchSitecore.Applications | |
{ | |
public static class ImageSettings | |
{ | |
private static List<string> restrictedExtensions = null; | |
public static bool IsRestrictedExtension(string filename) | |
{ | |
if (restrictedExtensions == null) | |
{ | |
restrictedExtensions = RestrictedImageExtensions.Split(new char[] { '|' }).ToList(); | |
} | |
if (restrictedExtensions.Any()) | |
return restrictedExtensions.Exists(restrictedExtension => string.Equals(restrictedExtension, Path.GetExtension(filename), StringComparison.CurrentCultureIgnoreCase)); | |
return false; | |
} | |
public static string RestrictedImageExtensions | |
{ | |
get | |
{ | |
return Sitecore.Configuration.Settings.GetSetting("Media.RestrictedImageExtensions"); | |
} | |
} | |
public static long MaxImageSizeInDatabase | |
{ | |
get | |
{ | |
return Sitecore.Configuration.Settings.GetLongSetting("Media.MaxImageSizeInDatabase", 524288000L); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0"?> | |
<!-- place this file in: /App_config/Include/Custom --> | |
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> | |
<sitecore> | |
<processors> | |
<attachFile argsType="Sitecore.Pipelines.Attach.AttachArgs"> | |
<processor mode="on" type="LaunchSitecore.Pipelines.Attach.ImageCheckSize, LaunchSitecore" | |
patch:before="processor[@type='Sitecore.Pipelines.Attach.CheckSize,Sitecore.Kernel']" /> | |
</attachFile> | |
<uiUpload> | |
<processor mode="on" type="LaunchSitecore.Pipelines.Upload.ImageCheckSize, LaunchSitecore" | |
patch:before="processor[@type='Sitecore.Pipelines.Upload.CheckSize, Sitecore.Kernel']" /> | |
</uiUpload> | |
</processors> | |
<settings> | |
<setting name="Media.MaxImageSizeInDatabase" value="1MB" /> | |
<setting name="Media.RestrictedImageExtensions" value=".jpg|.jpeg|.png|.gif|.bmp|.tiff" /> | |
</settings> | |
</sitecore> | |
</configuration> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8" ?> | |
<!-- place this file in: /sitecore/shell/Override --> | |
<control xmlns:def="Definition" xmlns="http://schemas.sitecore.net/Visual-Studio-Intellisense"> | |
<MediaFolder> | |
<FormPage> | |
<!-- BEGIN: Codebeside updated --> | |
<CodeBeside Type="LaunchSitecore.Applications.MediaFolderForm,LaunchSitecore"/> | |
<!-- END: Codebeside updated --> | |
<Stylesheet Src="Media Folder Viewer.css" DeviceDependant="true"/> | |
<Border id="SettingsContainer" style="display:none" /> | |
<Script runat="server" Src="/sitecore/shell/controls/lib/YUIupload/yahoo-dom-event/yahoo-dom-event.js" /> | |
<Script runat="server" Src="/sitecore/shell/controls/lib/YUIupload/element/element-beta-min.js" /> | |
<Script runat="server" Src="/sitecore/shell/controls/lib/YUIupload/uploader/uploader-experimental-min.js" /> | |
<Script type="text/JavaScript" language="javascript" src="/sitecore/shell/controls/lib/scriptaculous/scriptaculous.js?load=effects" /> | |
<Script type="text/JavaScript" language="javascript" Src="/sitecore/shell/controls/SitecoreLightbox.js" /> | |
<Script type="text/JavaScript" language="javascript" Src="/sitecore/shell/applications/media/mediafolder/mediafolder.js"/> | |
<!-- BEGIN: New JS override file added --> | |
<Script type="text/JavaScript" language="javascript" Src="/sitecore/shell/Override/mediafolderOverride.js"/> | |
<!-- END: New JS override file added --> | |
<div Class="scBackground" style="height:100%;"> | |
<Scrollbox ID="FileList" Background="Transparent" Border="none" Padding="0px" ContextMenu="FileList_ContextMenu" /> | |
</div> | |
<div id="UploadPanel" style="display:none; background: white"> | |
<div id="UploadUI"> | |
<Literal Text="These files are ready for uploading:" style="display: none; padding: 0px 0px 12px 4px; font-weight: 700" ID="Header" runat="server" /> | |
<Scrollbox ID="Scrollbox" Style="border:none; padding:0"> | |
<table style="display:none;" id="queue" cellpadding="0" cellspacing="0"> | |
<thead> | |
<tr> | |
<th class="filename"> | |
<Literal runat="server" Text="Filename" /> | |
</th> | |
<th class="size"> | |
<Literal runat="server" Text="Size" /> | |
</th> | |
<th class="alt"> | |
<Literal runat="server" Text="Alternate Text" /> | |
</th> | |
<th></th> | |
</tr> | |
</thead> | |
<tbody> | |
</tbody> | |
</table> | |
</Scrollbox> | |
</div> | |
<GridPanel id="AdvancedOptions" class="options" runat="server" Columns="2" Style="display:none"> | |
<Checkbox Header="Unpack ZIP Archives" runat="server" ID="Unpack" /> | |
<Checkbox Header="Make Uploaded Media Items Versionable" runat="server" ID="Versioned" /> | |
<Checkbox Header="Overwrite Existing Media Items" runat="server" ID="Overwrite" /> | |
<Checkbox Header="Upload as Files" runat="server" ID="AsFiles" /> | |
</GridPanel> | |
<div id="buttons" style="display:none"> | |
<img src="/sitecore/shell/themes/standard/images/loading15x15.gif" Class="closeProgress" style="display:none; margin-left: 8px" /> | |
<Button id="UploadButton" runat="server" Click="OnStart" Header="Upload" style="display:none" /> | |
<Button id="CancelButton" runat="server" Click="OnCancel" Header="Cancel" /> | |
<Button id="CloseButton" runat="server" Click="" onclick="javascript:scMediaFolder.activeUploader.close()" Header="Close" style="display:none" /> | |
</div> | |
</div> | |
</FormPage> | |
</MediaFolder> | |
</control> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Web; | |
using Newtonsoft.Json; | |
using Newtonsoft.Json.Converters; | |
using Sitecore; | |
using Sitecore.Diagnostics; | |
using Sitecore.Globalization; | |
using Sitecore.Configuration; | |
using Sitecore.Resources; | |
using Sitecore.StringExtensions; | |
using Sitecore.Web.Authentication; | |
using Sitecore.Text; | |
using Sitecore.Web.UI.Sheer; | |
namespace LaunchSitecore.Applications | |
{ | |
public class MediaFolderForm : Sitecore.Shell.Applications.Media.MediaFolder.MediaFolderForm | |
{ | |
protected override void OnLoad(System.EventArgs e) | |
{ | |
Assert.ArgumentNotNull(e, "e"); | |
base.OnLoad(e); | |
System.Collections.Generic.Dictionary<string, string> settings = new System.Collections.Generic.Dictionary<string, string>(); | |
this.UploadID = System.Guid.NewGuid().ToString(); | |
settings.Add("uploadID", this.UploadID); | |
if (UIUtil.IsFirefox() || UIUtil.IsWebkit()) | |
{ | |
string str = System.Web.HttpContext.Current.Session.SessionID; | |
Assert.IsNotNullOrEmpty(str, "session id"); | |
settings.Add("uploadSessionID", str); | |
settings.Add("uploadSessionID1", TicketManager.GetCurrentTicketId()); | |
} | |
this.Versioned.Checked = Settings.Media.UploadAsVersionableByDefault; | |
this.AsFiles.Visible = !Settings.Media.DisableFileMedia; | |
this.AsFiles.Checked = Settings.Media.UploadAsFiles; | |
if (!Settings.Upload.UserSelectableDestination) | |
{ | |
this.AsFiles.Visible = false; | |
} | |
if (this.AsFiles.Checked) | |
{ | |
settings.Add("uploadLimit", ((long)Settings.Runtime.EffectiveMaxRequestLengthBytes).ToString()); | |
} | |
else | |
{ | |
settings.Add("uploadLimit", ((long)System.Math.Min(Settings.Media.MaxSizeInDatabase, Settings.Runtime.EffectiveMaxRequestLengthBytes)).ToString()); | |
} | |
settings.Add("uploadFileLimit", ((long)Settings.Runtime.EffectiveMaxRequestLengthBytes).ToString()); | |
settings.Add("uploadingAsFilesMessage", Translate.Text("At least one of the files is too large to be uploaded to the database.")); | |
// BEGIN Following settings have been added | |
settings.Add("uploadImageLimit", ((long)System.Math.Min(ImageSettings.MaxImageSizeInDatabase, Settings.Runtime.EffectiveMaxRequestLengthBytes)).ToString()); | |
settings.Add("uploadImageRestrictedExtensions", ImageSettings.RestrictedImageExtensions); | |
// END Changed Code | |
this.RenderSettings(settings); | |
} | |
protected new void OnFilesCancelled(string packet) | |
{ | |
Assert.ArgumentNotNullOrEmpty(packet, "packet"); | |
ListString str = new ListString(packet); | |
Assert.IsTrue((bool)(str.Count > 0), "Zero cancelled files posted"); | |
System.Text.StringBuilder builder = new System.Text.StringBuilder(); | |
builder.Append("The following files are too big to be uploaded:"); | |
builder.Append("\n\n"); | |
string[] items = str.Items; | |
for (int i = 0; i < items.Length; i = (int)(i + 1)) | |
{ | |
builder.Append(items[i] + "\n"); | |
} | |
string str3 = MainUtil.FormatSize(System.Math.Min(Settings.Media.MaxSizeInDatabase, Settings.Runtime.EffectiveMaxRequestLengthBytes)); | |
builder.Append(Translate.Text("The maximum size of a file that can be uploaded is {0}.", new object[] { str3 })); | |
// BEGIN Following message has been added to be output to user | |
builder.Append("\n"); | |
builder.Append(Translate.Text("The maximum image size that can be uploaded is {0}.", MainUtil.FormatSize(ImageSettings.MaxImageSizeInDatabase))); | |
// END Changed Code | |
SheerResponse.Alert(builder.ToString(), new string[0]); | |
} | |
// Copied directly from Sitecore code - private methods FTW! | |
private void RenderSettings(System.Collections.Generic.Dictionary<string, string> settings) | |
{ | |
Assert.ArgumentNotNull(settings, "settings"); | |
System.IO.StringWriter writer = new System.IO.StringWriter(); | |
using (JsonWriter writer2 = new JsonTextWriter(writer)) | |
{ | |
JsonSerializer serializer = new JsonSerializer(); | |
serializer.Converters.Add(new XmlNodeConverter()); | |
serializer.Serialize(writer2, settings); | |
} | |
string str = writer.ToString(); | |
this.SettingsContainer.InnerHtml = "<script type='text/javascript'>var scUploadSettings = {0};</script>".FormatWith(new object[] { str }); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This script extends the default MediaFolder.js class | |
// processSelectedFiles should match your Sitecore version, add in the additional check in Line 12, rest of function is copy+pasted | |
// <!-- place this file in: /sitecore/shell/Override --> | |
SitecoreMediaUploader.addMethods({ | |
processSelectedFiles: function (files) { | |
for (var file in files) { | |
if (YAHOO.lang.hasOwnProperty(files, file)) { | |
file = files[file]; | |
} | |
if (file.size > this.uploadLimit() || this.uploadImageLimitReached(file)) { // added image file size check here | |
if (this.simple || file.size > this.uploadFileLimit()) { | |
this.cancelledFiles.push(file); | |
return false; | |
} | |
else { | |
this.forcedFileUpload = true; | |
} | |
} | |
$("queue").show(); | |
file.size = (file.size / 1000).toFixed(0) + " KB"; | |
var html = "<tr id='#{id}' class='queued'><td class='name'>#{name}</td><td class='size'>#{size}</td><td class='alt'><input class='scFont alt' type='text' id='#{id}_alt' /></td><td class='progress'><img class='filler' style='width:0px' src='/sitecore/shell/Themes/Standard/Images/Progress/filler_media.png' alt='' /></td></tr>".interpolate(file); | |
$$("#queue tbody")[0].insert({ bottom: html }); | |
if (!this.simple) { | |
$("UploadButton").show(); | |
} | |
this.queue.push(file); | |
} | |
}, | |
// BEGIN: New extended helper functions | |
uploadImageLimitReached: function (file) { | |
var maxImageSize = parseInt(this.settings.uploadImageLimit); | |
var arrayOfExtensions = this.settings.uploadImageRestrictedExtensions.split('|'); | |
if (arrayOfExtensions.indexOf(this.getFileExtension(file.name)) > -1 && file.size > maxImageSize) { | |
return true; | |
} | |
return false; | |
}, | |
getFileExtension: function(fileName) { | |
var ext = fileName.split("."); | |
if (ext.length === 1 || (ext[0] === "" && ext.length === 2)) { | |
return ""; | |
} | |
return "." + ext.pop().toLowerCase(); | |
} | |
// END: Extended helper functions | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment