2017-02-14 72 views
0

所以剛開始用一把umbraco 7個網站,一些工作。 該網站具有自定義媒體類型。添加媒體(包括通過拖放)並選擇此自定義類型時,添加的文件的完整路徑/ URL不會顯示在任何位置。一把umbraco 7自媒體類型的拖放功能

我添加了一個監聽器MediaService.Saved事件,這是射擊,但該方法中的所有我似乎已經得到的信息的ID和文件,而不是文件本身的名稱。

我期待「umbracoFile」屬性被自動填充,但認爲不會出現這種情況。 [我甚至嘗試編輯我的自定義媒體類型以使其具有別名「umbracoFile」的屬性,但這只是導致後端崩潰]。

反正是有得到文件的URL /路徑或強制一把umbraco設置「umbracoFile」屬性?

回答

0

得到的東西到底感謝羅伯特的回答在工作 - 這是相當哈克,但似乎工作,所以我要離開這裏的情況下,它可以幫助別人。

注意,它採用的是貶值的事件處理程序和反射來設置私有變量,所以我不建議任何人使用它,但它可能會給人一個想法從哪裏開始:

public void MediaService_Creating(IMediaService sender, NewEventArgs<IMedia> e) 
    { 
     int i = 0; 
     Type t = e.Entity.GetType(); 
     FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance); 
     FieldInfo field = fields.First(x => x.Name == "_contentType"); 

     MethodInfo findMediaTypeByAlias = ApplicationContext.Current.Services.MediaService 
      .GetType().GetMethod("FindMediaTypeByAlias", BindingFlags.NonPublic | BindingFlags.Instance); 

     IMediaType mediaType = (IMediaType)findMediaTypeByAlias.Invoke(
      ApplicationContext.Current.Services.MediaService, 
      new object[] { Constants.Conventions.MediaTypes.Image }); 

     field.SetValue(e.Entity, mediaType); 
     field = fields.First(x => x.Name == "ContentTypeBase"); 
     field.SetValue(e.Entity, mediaType); 

     i = e.Entity.ContentTypeId; 
    } 

基本前提是在創建媒體類型的同時將媒體類型更改爲圖像。通過以這種方式更改它,可以添加和自動填充圖像媒體類型的任何其他屬性。如果自定義媒體類型的屬性與其中一個圖像媒體類型屬性(如umbracoFile)共享一個別名,則會自動填充該屬性值,這意味着可以根據需要在任何保存/保存的事件偵聽器中使用該屬性值。

1

當您在文件夾瀏覽器控件(用於文件夾的介質部分或介質選取器對話框中)上執行拖放操作時,Umbraco會檢查您正在拖動到上載區域的文件類型,這決定了要創建的最佳媒體類型。默認情況下,對於媒體類型爲Image的任何已知圖像類型(png,jpg,gif等),其他任何內容都會自動分配給File媒體類型。

當您掛入MediaService.Saved事件時,您可以訪問Umbraco Media中代表該文件的對象,但根據上述說明已將其保存爲特定文件類型(這在7.5中稍有變化.9 - 見下面的說明)。如果您想啓用自己的媒體類型並將其設置爲拖放,則需要深入一點。

看看這個:https://github.com/umbraco/Umbraco-CMS/blob/dev-v7/src/Umbraco.Web/Editors/MediaController.cs#L626-L638

注:這適用於非常近期只有一把umbraco的版本,7.5.9的 - 您的里程可能會有所不同。

將文件上傳到您的首選媒體類型時,您可能需要查看設置發佈數據的contentTypeAlias參數,這可能需要您創建自己的文件夾瀏覽器數據類型版本。

+0

謝謝 - 你的回答引起我失望的是工作路線,雖然我不知道這是你腦子裏想的是什麼相當。 –

+0

只要你到達你的目的地,一切都好:) –