1

SAS を使用してブロブを指すダウンロード URL を使用するページが多数ある MVC コードをリファクタリングしようとしています。Url をコントローラーに渡し、それを使用して関連する Blob を見つけられると便利です。たとえば、唯一の入力パラメーターとしてダウンロード URL を持つアクションがあります。SAS が削除などを公開している場合にのみ削除リンクを表示するリンク ヘルパーを作成することもできます。

URL を Azure に渡し、その代わりに CloudBlockBlob を取得できると助かります。そのため、削除、更新、メタデータの取得などを行うことができました。

私が現在それを行うことができる唯一の方法は、次のようなテクニックを使用することです

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

これは機能しますが、非常に奇妙に思えます。

Uri から CloudBlockBlob を取得するコードがわかりません。

何か案は?現在、Azure Storage 1.7 を使用しています

4

2 に答える 2

4

特別なことをする必要はありません。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();

これは問題なく機能します。

于 2013-01-25T04:33:27.070 に答える
1

SASキーの権限を取得するためのコードは次のとおりです(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;

そして、これはSASキーを持つURLに基​​づいてICloudBlobを取得します(blobUrlがSASキーを持つURLであると仮定します)

// 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));
于 2013-01-24T23:46:15.447 に答える