我正在使用UploadProcessor阻止特定文件上传到MediaLibrary。 一切都很好,我可以看到提醒Sitecore的消息。但是,Sitecore的错误消息实际上并不是用户友好的“无法上传一个或多个文件。有关详细信息,请参阅日志文件”
所以,我想为用户添加额外的警报框。下面是我的代码,但是javascript无效。
有些人希望我使用“SheerResponse”,但Sitecore Document提到
uiUpload管道不是作为Sheer事件的一部分运行,而是作为表单加载过程的一部分来响应回发。这是因为上传的文件仅在“真实”回发期间可用,而不是在纯粹的UI事件期间。从这个意义上讲,uiUpload管道并未设计为提供UI。为了向用户提供反馈,处理器应该采用一些发出JScript代码的技巧。 http://sdn.sitecore.net/Articles/Media/Prevent%20Files%20from%20Uploading/Pipeline%20upload.aspx
你知道如何实现警报框吗?
答案 0 :(得分:2)
媒体库中的上传控件使用flash上传文件。作为此上传过程的一部分,使用JavaScript检查文件大小,并在上载之前进行客户端验证。
您需要进行一些更改。我要在这里列出它们,你可以在我的Github Gists中找到所有代码:
https://gist.github.com/jammykam/54d6af46593fa3b827b4
1)如果扩展名为config
,则扩展并更新MediaFolder.js
文件以仅根据图像大小检查文件大小
if (file.size > this.uploadLimit() || this.uploadImageLimitReached(file)) {
...
}
2)更新MediaFolder.xml
页面以包含上述JS。修改代码,继承自Sitecore.Shell.Applications.Media.MediaFolder.MediaFolderForm
并覆盖OnLoad
和OnFilesCancelled
,以呈现受限扩展和最大图像大小设置,以便将这些设置传递给Javascript并显示友好警报。
settings.Add("uploadImageLimit", ((long)System.Math.Min(ImageSettings.MaxImageSizeInDatabase, Settings.Runtime.EffectiveMaxRequestLengthBytes)).ToString());
settings.Add("uploadImageRestrictedExtensions", ImageSettings.RestrictedImageExtensions);
3)更新Attach.xaml.xml
codebeside以检查图片大小,继承自Sitecore.Shell.Applications.FlashUpload.Attach.AttachPage
并覆盖OnQueued
方法:
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);
}
4)使用新设置添加配置包含。
<setting name="Media.MaxImageSizeInDatabase" value="1MB" />
<setting name="Media.RestrictedImageExtensions" value=".jpg|.jpeg|.png|.gif|.bmp|.tiff" />
你仍然可以(并且应该)保持管道的位置,但是我的previous answer注意到了我提供的限制扩展&#34;配置设置现在已更改(进入单个设置而不是将其传递到管道中)。
包含请注意,我已使用Sitecore 7.2 rev 140526对此进行了测试,因此基本代码是从那里获取的。如果您使用的是其他版本,则应检查基本C#,JS和XML代码是否与我提供的相匹配。代码被注释以显示已更改的内容。
以上在内容编辑器中有效,它在页面编辑器中不起作用!在Sitecore 7.2+中使用SPEAK对话框,看起来他们使用不同的管道集。这需要更多调查(提出另一个问题,并指定您正在使用的Sitecore版本)。