2011-07-05 95 views
1

我想通過genericHandler.ashx保護我的媒體。我有一個重寫規則/媒體/handlers/my-handler.ashx?media-url=xxx.jpg但是我無法在umbraco api中找到從url獲取nodeId的函數。Umbraco從網址獲取媒體

在我用這個SQL查詢的時刻:

public static Int32 GetNodeIdFromUrl(String url) 
{ 
     SqlParameter[] sqParams = { new SqlParameter("@url", url) }; 
     string sql = "select contentNodeId from cmsPropertyData where dataNvarchar =  @url"; 
     int id = -1; 
     try 
     { 

      id = (int)SqlHelper.ExecuteScalar(umbraco.GlobalSettings.DbDSN,CommandType.Text,sql,sqParams); 
     } 
     catch (Exception ex) 
     { 
      umbraco.BusinessLogic.Log.Add(
       umbraco.BusinessLogic.LogTypes.Error, 
       new umbraco.BusinessLogic.User(0), 0, 
       "Error from download security handler ->" + ex.Message.ToString()); 
     } 

     return id; 
    } 

的靈感來自http://our.umbraco.org/forum/developers/api-questions/4284-getting-media-Id-from-path

你知道的任何一把umbraco API函數之前做到這一點?

回答

0

我想如果你知道url的正確格式,你可以通過使用一些正則表達式或拆分url來獲取媒體ID。

+0

沒有沒有mediaId的網址內。 /media/1042/xxx.jpg給出一個cmsPropertyData.Id –

+0

是的,那麼你可以從網址獲取屬性ID 1042。通過獲取媒體資料,您可以獲取媒體資源。 –

+0

@mahesh您是如何從umbraco API獲得媒體項目的屬性ID? – marapet

-1

如果您設置了將/ media中的任何內容映射到/handlers/my-handler.ashx的重定向,則原始URL請求將採用格式爲/media/{mediaID}/{fileName}.{extension }。 介質ID是磁盤上/ media目錄內的文件夾的名稱。當你收到一個傳入的請求時,只需在「/ media /」之後和下一個「/」之前對所有內容進行分組。

HTH,

本傑明

+0

否,網址中沒有mediaId。 /media/1042/xxx.jpg給出一個cmsPropertyData.Id。不是嗎? –

+0

Yohann,Umbraco的工作方式是將媒體庫中的任何內容存儲在/ media文件夾下,並使用子文件夾來表示媒體項的ID - 形式爲/media/{mediaID}/{myfilename}.{myextension}。如果你正在重定向請求(以UrlRewriting.Net的正則表達式形式 - ^/media /(.*)+$),那麼你的處理程序將被加入類似/1042/xxx.jpg的東西。您需要URL的「1042」部分。 –

+3

@codegecko這是不正確的 - 正如OP所說的,_1042_是cmsPropertyData表的ID。 – marapet