2017-05-31 23 views
0

データベースに接続されているC#MVC(私はMVCを初めて使用しています)に基本的なWebアプリケーションがあります。そのデータベースには、ファイル名のリストを持つテーブルがあります。これらのファイルは、Azure Storage Blob Containerに格納されています。C#MVC Web AppサービスAzureストレージブロブに接続

私はスカイフォールディング(コントローラとビューを作成)を使用してファイル名のテーブルからデータを表示しています。これは問題なく動作します。

ここで、これらのファイル名をBLOBストレージに接続して、ユーザーがクリックして開くことができるようにしたいと思います。これをどのように達成するのですか?

インデックスビューを編集しますか?ユーザーがファイル名をクリックしてAzureストレージに接続してファイルを開くようにしますか?これはどうですか?

ストレージ上のファイルはプライベートであり、ストレージキーを使用してアクセスします。ファイルを公開することはできません。

ありがとうございました。

[更新]

Iは、以下のコードを使用して、共有アクセス署名(SAS)を実装しました。

public static string GetSASUrl(string containerName) 
    { 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
     CloudBlobContainer container = blobClient.GetContainerReference(containerName); 
     BlobContainerPermissions containerPermissions = new BlobContainerPermissions(); 
     containerPermissions.SharedAccessPolicies.Add("twominutepolicy", new SharedAccessBlobPolicy() 
     { 
      SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-1), 
      SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(2), 
      Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Read 
     }); 
     containerPermissions.PublicAccess = BlobContainerPublicAccessType.Off; 
     container.SetPermissions(containerPermissions); 
     string sas = container.GetSharedAccessSignature(new SharedAccessBlobPolicy(), "twominutepolicy"); 
     return sas; 
    } 

    public static string GetSasBlobUrl(string containerName, string fileName, string sas) 
    { 
     // Create new storage credentials using the SAS token. 
     StorageCredentials accountSAS = new StorageCredentials(sas); 
     // Use these credentials and the account name to create a Blob service client. 
     CloudStorageAccount accountWithSAS = new CloudStorageAccount(accountSAS, [Enter Account Name], endpointSuffix: null, useHttps: true); 
     CloudBlobClient blobClientWithSAS = accountWithSAS.CreateCloudBlobClient(); 

     // Retrieve reference to a previously created container. 
     CloudBlobContainer container = blobClientWithSAS.GetContainerReference(containerName); 

     // Retrieve reference to a blob named "photo1.jpg". 
     CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName); 

     return blockBlob.Uri.AbsoluteUri + sas; 
    } 

答えて

0

パブリックではありませんブロブをアクセスするためには、あなたが共有アクセス署名を使用する必要があります、それを、あなたは一定の期間のための有効なアクセストークンを作成します(あなたが選択します)としますIPアドレスで制限することもできます。ここで

さらに詳しい情報:

https://docs.microsoft.com/en-us/azure/storage/storage-dotnet-shared-access-signature-part-1

彼らはパブリックではないので、あなたは前に、追加のステップは、ブロブにSASトークンを連結している、あなたのビューにデータを渡す追加する必要がありますウリ。ここには非常に良い例があります:http://www.dotnetcurry.com/windows-azure/901/protect-azure-blob-storage-shared-access-signature

+0

ありがとうございました。私の問題を整理するのに役立ちました。最後のリンクは若干古くなっていますが、正しいと思う更新されたコードで質問を更新しました。 – SliderUK

関連する問題