データベースに接続されている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;
}
ありがとうございました。私の問題を整理するのに役立ちました。最後のリンクは若干古くなっていますが、正しいと思う更新されたコードで質問を更新しました。 – SliderUK