2017-05-31 83 views
0

我有一個基本的Web應用程序在C#MVC(我是新來的MVC)連接到數據庫。在那個數據庫中有一個包含文件名列表的表格。這些文件存儲在Azure存儲Blob容器中。C#MVC Web應用服務連接到Azure存儲Blob

我用Scaffolding(創建一個控制器和視圖)來顯示我的文件名錶中的數據,並且工作正常。

現在我想將這些文件名連接到blob存儲,以便用戶可以點擊並打開它們。我如何實現這一目標?

我是否編輯索引視圖?我是否讓用戶單擊文件名,然後連接到Azure存儲以打開該文件?這是如何完成的?

請注意,存儲上的文件是私人的,並使用存儲密鑰進行訪問。文件不能公開。

感謝您的任何建議。

[更新]

我已經使用下面的代碼實現的共享訪問簽名(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令牌團塊URI。你可以在這裏找到一個很好的例子:http://www.dotnetcurry.com/windows-azure/901/protect-azure-blob-storage-shared-access-signature

+0

非常感謝這些信息,幫助我理清了我的問題。最後一個鏈接稍微過時了,儘管我已經用我認爲正確的更新後的代碼更新了我的問題。 – SliderUK