2012-09-13 64 views
0

我有一個屬性爲「Image」的頁面數據文件夾,它是對Composite C1後端媒體文件的引用。檢索媒體文件的外部URL

我現在想檢索我的asp.net用戶控件的數據,但我得到的,當我訪問我的PageDataFolder類型「圖像」屬性,是一個具有以下格式的字符串:

mediaarchive:b5354eba-3f69-4885-9eba-74576dff372d

我不知道如何從中獲取外部圖像url。有我可以使用的API函數嗎?

回答

3

構建像

〜/媒體({MediaKey}

示例的URL: 「〜/媒體(mediaarchive:b5354eba-3f69-4885-9eba-74576dff372d)」

一旦C1頁面被渲染,它將被替換爲以下SEO友好url:

/media/{在媒體存檔中的路徑

例如: 「/媒體/ 5611182f-6462-4b80-a051-3c3b9bb3276d /文獻/截圖/奧林匹亞/ 1_png」

請注意,您可以通過查詢字符串指定圖像resing /裁剪選項。 http://docs.composite.net/Getting-started/Configuration/Resizing-Images

如果你因爲某些原因不能依靠C1頁面渲染邏輯,你可以建立一個公共媒體的URL與下面的代碼:

protected string GetMediaUrl(string mediaPath) 
{ 
    string[] parts = mediaPath.Split(new[] { ':' }); 

    string mediaStore = parts[0]; 
    Guid mediaId = new Guid(parts[1]); 

    string mediaUrl = MediaUrls.BuildUrl(new MediaUrlData { MediaStore = mediaStore, MediaId = mediaId, QueryParameters = new NameValueCollection() }, 
             UrlKind.Public); 

    // Temporary fix, allows media player to receive a nice url with an extension 
    return mediaUrl.Replace("_jpg", ".jpg").Replace("_mov", ".mov").Replace("_m4v", ".m4v").Replace("_swf", ".swf"); 
} 
+0

嘿,我真的很喜歡使用〜/ Media()語法,但由於某種原因,它不適合我。我有一個ascx控件,通過LoadUserControl函數加載到我的頁面中。這是我的轉發器中的代碼:'「」/'雖然使用實際的媒體網址,但它並不替換字符串。有什麼可能出錯?有任何想法嗎?我試圖離開runat =服務器,但這沒有幫助。 – magnattic

+0

是否可以在asp.net用戶控件的數據綁定之前應用URL替換? – magnattic

+0

確實,C1不處理用戶控件的結果。我可以看到2個可能的解決方案,如何在控件呈現後如何製作它: 1)編寫一個控件,您可以使用該控件將aspx控件包圍起來,並將替換Render事件 –

1

我找到了一種方法,但它不完全最短的一個:

MediaUrlHelper.GetUrl(MediaUrlHelper.GetFileFromQueryString(new NameValueCollection { {"id", myItem.Image} })) 

我還是希望有人想出了一個更好的解決方案,我會很樂意來標記一個作爲答案。

+0

,如果你在你的用戶控件一IMediaFile參考,斜面你只需將該對象傳入MediaUrlHelper.GetUrl(...)?? –

+0

不幸的是,當我嘗試訪問屬性(如果我的C#中的頁面數據文件夾)時,我只有上述表單的字符串。就像我在嘗試通過API訪問頁面引用時僅獲取GUID一樣。 – magnattic

+0

真......我誤解了,認爲圖像是UserControl上的一個屬性。但爲什麼你需要外部網址?爲什麼不把它寫成像/ media(mediaarchive:b5354eba-3f69-4885-9eba-74576dff372d)並讓C1在渲染時爲你展開url? –