2013-01-24 2 views
1

SAS를 사용하여 blob을 가리키는 다운로드 URL을 사용하는 많은 페이지가있는 MVC 코드를 리팩터링하려고합니다. Url을 컨트롤러에 전달하고 연결된 Blob의 위치를 ​​찾는데 사용할 수 있다면 좋을 것입니다. 예 : 다운로드 URL 만 입력 매개 변수로 사용하는 작업이 있습니다. SAS가 삭제 등을 노출하는 경우에만 삭제 링크를 표시하는 링크 도우미를 만들 수도 있습니다.SAS가있는 저장 URL에서 Azure CloudBlockBlob을 얻으려면 어떻게해야합니까?

URL을 Azure로 전달하고 대가로 CloudBlockBlob을 얻을 수 있다면 큰 도움이 될 것입니다. 그래서 내가, 삭제 업데이트 할 수있는, 메타 데이터 등

나는 그것이 현재

 var deleteBlobRequest = BlobRequest.Delete(new Uri(fileUrl), 30, null, DeleteSnapshotsOption.IncludeSnapshots, ""); 
    deleteBlobRequest.GetResponse().Close(); 

이 작동하지만 매우 이상한 것처럼 사용하는 기술에 의존한다 할 수있는 유일한 방법 얻는다.

Uri에서 CloudBlockBlob을 가져 오는 코드를 알아낼 수 없습니다.

아이디어가 있으십니까? 나는 현재에 SAS 키의 사용 권한을 얻기 위해 코드를 푸른 저장을 여기

답변

3

: SAS 키를 가진 URL 에합니다 (blobUrl를 상정하면 SAS 키가있는 URL입니다). SAS Uri로 BLOB를 구성하면 스토리지 클라이언트 라이브러리가이를 처리합니다. 예를 들어, 다음 코드를 사용하십시오.

 CloudBlockBlob cloudBlockBlob = new CloudBlockBlob("http://127.0.0.1:10000/devstoreaccount1/temp/sastest.txt?sr=b&st=2013-01-25T04%3A28%3A09Z&se=2013-01-25T05%3A28%3A09Z&sp=rwd&sig=jIWWFwZ6MXaL6FD%2F2%2FpqPl1g4f0ElFrr1fKNg5U%2FAkg%3D"); 
     cloudBlockBlob.Delete(); 

이것은 정상적으로 작동합니다.

+0

훌륭한 작품입니다. 이상하게 생각해 봤어. 어쩌면 삭제 권한을 포함하여 시그 (SIG)를 올바르게 갖기 전이었을 것입니다. – GraemeMiller

1

1.7이다 사용하고합니다 (blobUrl를 상정하면 SAS 키가있는 URL입니다) :

// Get permssions for current SAS key. 
var queryString = HttpUtility.ParseQueryString(blobUrl); 
var permissionsText = queryString["sp"]; 
var permissions = SharedAccessBlobPermissions.None; 
if (permissionsText.Contains("w")) 
    permissions = permissions | SharedAccessBlobPermissions.Write; 
if (permissionsText.Contains("r")) 
    permissions = permissions | SharedAccessBlobPermissions.Read; 
if (permissionsText.Contains("d")) 
    permissions = permissions | SharedAccessBlobPermissions.Delete; 
if (permissionsText.Contains("l")) 
    permissions = permissions | SharedAccessBlobPermissions.List; 

그리고이는 ICloudBlob 기반 얻을 것이다 당신은 특별한 아무것도 할 필요가 없습니다

// Get the blob reference. 
var blobUri = new Uri(blobUrl); 
var path = String.Format("{0}{1}{2}{3}", blobUri.Scheme, Uri.SchemeDelimiter, blobUri.Authority, blobUri.AbsolutePath); 
var blobClient = new CloudBlobClient(new Uri(path), new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(blobUri.Query)); 
ICloudBlob blobReference = blobClient.GetBlobReferenceFromServer(new Uri(path)); 
+0

v2 스토리지 클라이언트를 사용하고 있습니까? – GraemeMiller

+0

네,하지만 권한 목록을 얻으려면 SDK를 사용할 필요가없는 쿼리 문자열을 구문 분석하기 만하면됩니다. –

+0

사용 권한을 주셔서 감사합니다. 나는이 파일을 얻으려고 애 쓰고있다. 그냥 ICloudBlob을 만들거나 GetBlobReferenceFromServer를 찾을 수 없습니다. 나는 그것이 Storage를 위해 1.7에 있다고 생각한다. – GraemeMiller