2011-07-05 9 views
1

genericHandler.ashx로 미디어를 보호하고 싶습니다. /handlers/my-handler.ashx?media-url=xxx.jpg에 대한 재 작성 규칙/미디어가 있습니다.하지만 URL에서 nodeId를 가져 오기 위해 umbraco api에서 함수를 찾을 수 없습니다. 이전에이 작업을 수행 할 수있는 umbraco API 함수를 알고Umbraco url에서 미디어 가져 오기

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

영감 :이 SQL 쿼리를 사용하는 순간

?

답변

0

URL의 올바른 형식을 알고 있으면 정규 표현식을 사용하거나 URL을 분할하여 미디어 ID를 사용할 수 있다고 생각합니다.

+0

없음 URL을 내부에 mediaId이 없습니다. /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 폴더 아래의 미디어 라이브러리에 항목을 저장하고 미디어 항목의 ID를 나타내는 하위 폴더를 사용하는 것입니다 (/media/{mediaID}/{myfilename}.{myextension} 형식). 요청을 리디렉션하는 경우 (UrlRewriting.Net-^/media /(.*)+$의 Regex 양식) 핸들러에 /1042/xxx.jpg와 같은 피드가 제공됩니다. 당신은 URL의 "1042"부분을 원합니다. –

+3

@codegecko 올바르지 않습니다 - OP가 올바르게 표시되었으므로 _1042_는'cmsPropertyData' 테이블의 ID입니다. – marapet

관련 문제