2011-07-05 3 views
1

私はgenericHandler.ashxでメディアを保護したいと思います。 /handlers/my-handler.ashx?media-url=xxx.jpgへの書き換えルール/メディアがありますが、私はumbraco apiでurlからnodeIdを取得する関数を見つけることができません。私は、このSQLクエリを使用する瞬間UmbracoはURLからメディアを取得します

http://our.umbraco.org/forum/developers/api-questions/4284-getting-media-Id-from-path

に触発

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; 
    } 

あなたが前にこれを実行するために、任意のumbraco API関数を知っていますか?

答えて

0

URLの正しい形式がわかっている場合は、正規表現を使用して、またはURLを分割して、メディアIDを取得することができます。

+0

はありません何のMEDIAIDがURL内ありません。 /media/1042/xxx.jpgはcmsPropertyData.Idを返します –

+0

はい、URLからプロパティID 1042を取得できます。プロパティIDを取得することで、メディアアイテムを取得できます。 –

+0

@mahesh umbraco APIを使ってプロパティIDからどのようにメディアアイテムを取得しますか? – marapet

-1

/mediaから/handlers/my-handler.ashxに何かをマッピングするようにリダイレクトを設定した場合、元のURLリクエストは/media/{mediaID}/{fileName}.{extension }。 メディアIDは、ディスク上の/ mediaディレクトリ内のフォルダの名前です。着信要求を受け取ったら、単に "/ media /"の後と次の "/"の前にすべてをSubStringします。

HTH、

ベンジャミン

+0

URLの中にmediaIdはありません。 /media/1042/xxx.jpgはcmsPropertyData.Idを返します。ではない ? –

+0

Yohann、Umbracoのやり方は、/ mediaフォルダの下のMediaライブラリに何かを格納し、メディアアイテムのIDを示すためにサブフォルダを使用することです - /media/{mediaID}/{myfilename}.{myextension}の形式です。要求をリダイレクトする場合(UrlRewriting.Net-^/media /(.*)+$のRegex形式)、ハンドラには/1042/xxx.jpgのようなものが与えられます。 URLの「1042」部分が必要です。 –

+3

@codegeckoそれは正しくありません - OPが正しく示されているので、_1042_は 'cmsPropertyData'テーブルのIDです。 – marapet

関連する問題