2015-01-07 19 views
2

我正在使用UploadProcessor阻止特定文件上傳到MediaLibrary。 一切正常,我可以看到Sitecore的消息。但是,Sitecore的錯誤信息並不真正用戶友好「一個或多個文件無法上傳,請參閱日誌文件以獲取更多詳細信息」Sitecore管道上傳處理器

因此,我想爲用戶添加額外的警報框。以下是我的代碼,但JavaScript不起作用。

enter image description here

有人要我用「SheerResponse」,但Sitecore的文件中提到,

的uiUpload流水線沒有運行作爲純粹事件的一部分,但由於形式加載的一部分處理回覆回覆。這是因爲上傳的文件只能在「真實」回傳期間使用,而不能在Sheer UI事件期間使用。在這個意義上,uiUpload管道並沒有被設計爲提供UI。爲了向用戶提供反饋,處理器應該採取一些發出JScript代碼的技巧。 http://sdn.sitecore.net/Articles/Media/Prevent%20Files%20from%20Uploading/Pipeline%20upload.aspx

你有什麼想法如何實現警戒框?

+0

完全相同的問題,我在其他答案中反對。很高興你提出了另一個問題,有興趣知道爲什麼這不起作用。順便說一句,標準的Sitecore CheckSize處理器使用完全相同的代碼,它的工作原理... – jammykam

+0

我不能等待搞清楚......任何人? – Jay

+0

如果您有權訪問Sitecore支持,那麼我會考慮提出一張票,看他們是否能提供一些見解。 – jammykam

回答

2

媒體庫中的上傳控件使用Flash來上傳文件。作爲該上傳過程的一部分,文件大小使用JavaScript進行檢查,並在上傳前進行客戶端驗證。

您需要進行多項更改。我只是要在這裏一一列舉了,你可以找到所有的代碼在我的Github的要旨:

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


1)擴展和更新MediaFolder.js文件所要檢查的文件大小隻有在擴展是在配置中指定一個

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

2)更新MediaFolder.xml頁面包括ABOV圖像大小e JS。修改從Sitecore.Shell.Applications.Media.MediaFolder.MediaFolderForm繼承的codebeside,並覆蓋OnLoadOnFilesCancelled,以呈現受限制的擴展名和最大圖片大小設置,以便將這些設置傳遞給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注意了現在的「限制的分機」配置設置已經改變(成一個單一的環境,而不是將其傳遞到的管道)。 Gist包含

請注意,我已經使用Sitecore 7.2 rev 140526對此進行了測試,所以基本代碼是從那裏取得的。如果您使用的是不同的版本,那麼您應該檢查基本的C#,JS和XML代碼與我提供的相匹配。該代碼被註釋以向您顯示已更改的內容。

上面的作品在內容編輯器中,它不能在頁面編輯器中使用! Sitecore 7.2+中的哪一個使用SPEAK對話框,看起來他們使用了一組不同的管道。這需要更多調查(提出另一個問題,並指定您正在使用哪個版本的Sitecore)。

+0

有沒有一種方法可以調用確認對話框並獲得選擇結果並繼續上傳圖像或取消通過流水線的過程?甚至有這樣的結果?無需添加您提供的所有額外代碼 –

+0

@MatthewPigram額外的代碼主要是使其配置驅動並顯示自定義圖像特定的失敗消息。可以使用Javascript確認窗口停止上傳([pastebin示例](http://pastebin.com/ESVd1Msy)),並硬編碼您要檢查的大小,但我沒有7.x安裝現在進行測試。 – jammykam