【问题标题】:Sitecore Pipeline Upload ProcessorSitecore 管道上传处理器
【发布时间】:2015-03-05 14:38:59
【问题描述】:

我正在使用 UploadProcessor 来阻止将特定文件上传到 MediaLibrary。 一切正常,我可以看到 Sitecore 的警报消息。但是,Sitecore 的错误消息并不是真正用户友好的“无法上传一个或多个文件。有关详细信息,请参阅日志文件”

所以,我想为用户添加额外的警报框。下面是我的代码,但是 javascript 不工作。

有些人希望我使用“SheerResponse”,但 Sitecore 文档提到了这一点

uiUpload 管道不是作为 Sheer 事件的一部分运行,而是作为响应回发的表单加载过程的一部分运行。这是因为上传的文件仅在“真实”回传期间可用,而不是在 Sheer UI 事件期间可用。从这个意义上说,uiUpload 管道并非旨在提供 UI。为了向用户提供反馈,处理器应该使用一些技巧来发出 JScript 代码。 http://sdn.sitecore.net/Articles/Media/Prevent%20Files%20from%20Uploading/Pipeline%20upload.aspx

你知道如何实现警报框吗??

【问题讨论】:

  • 与我在另一个答案中遇到的问题完全相同。很高兴你提出了另一个问题,我很想知道为什么这不起作用。顺便说一句,标准的 Sitecore CheckSize 处理器使用完全相同的代码并且它可以工作......
  • 我迫不及待想弄清楚...有人吗????
  • 如果您可以访问 Sitecore 支持,那么我会考虑提出请求,看看他们能否提供一些见解。
  • 我想我没有访问权限 (support.sitecore.net/helpdesk/login.aspx)。所以,我将问题添加到论坛。 sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?PostID=66169

标签: javascript upload sitecore alert


【解决方案1】:

媒体库中的上传控件使用 flash 上传文件。作为此上传过程的一部分,使用 JavaScript 检查文件大小,并在上传前进行客户端验证。

您需要进行许多更改。我只是在这里列出它们,你可以在我的 Github Gists 中找到所有代码:

https://gist.github.com/jammykam/54d6af46593fa3b827b4


1) 扩展和更新MediaFolder.js 文件,仅当扩展名是配置中指定的扩展名时,才能根据图像大小检查文件大小

if (file.size > this.uploadLimit() || this.uploadImageLimitReached(file)) {
    ...
}

2) 更新MediaFolder.xml 页面以包含上述JS。修改代码旁,从 Sitecore.Shell.Applications.Media.MediaFolder.MediaFolderForm 继承并覆盖 OnLoadOnFilesCancelled,以呈现受限扩展和最大图像大小设置,以便将这些传递给 Javascript 并显示友好的警报。

settings.Add("uploadImageLimit", ((long)System.Math.Min(ImageSettings.MaxImageSizeInDatabase, Settings.Runtime.EffectiveMaxRequestLengthBytes)).ToString());
settings.Add("uploadImageRestrictedExtensions", ImageSettings.RestrictedImageExtensions);

3) 更新Attach.xaml.xml 代码旁以检查图像大小,继承自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 我给出的“受限扩展”配置设置现在已更改(变为单个设置,而不是将其传递到管道中)。要点包含

请注意,我已使用 Sitecore 7.2 rev 140526 对此进行了测试,因此基本代码取自那里。如果您使用不同的版本,那么您应该检查基本的 C#、JS 和 XML 代码是否与我提供的相匹配。对代码进行了注释以向您展示发生了什么变化。

以上内容在内容编辑器中有效,在页面编辑器中无效!在 Sitecore 7.2+ 中使用 SPEAK 对话框,看起来它们使用了一组不同的管道。这需要更多调查(提出另一个问题,并说明您使用的是哪个版本的 Sitecore)。

【讨论】:

  • 有没有一种方法可以调用确认对话框并获取选择结果,然后继续上传图像或通过管道取消该过程?或者甚至是达到这种效果的东西?无需添加您提供的所有额外代码
  • @MatthewPigram 额外的代码主要是为了使其配置驱动并显示自定义图像特定的失败消息。可以使用 Javascript 确认窗口来停止上传 (pastebin example) 并硬编码您要检查的大小,但我目前没有 7.x 安装来测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 2014-03-08
  • 2023-03-10
相关资源
最近更新 更多