繁体   English   中英

C#MVC Web应用程序服务连接到Azure存储Blob

[英]C# MVC Web App Service Connect to Azure Storage Blob

我在C#MVC中拥有一个基本的Web应用程序(我是MVC的新手),该应用程序已连接到数据库。 在该数据库中,有一个带有文件名列表的表。 这些文件存储在Azure存储Blob容器中。

我使用了脚手架(创建控制器和视图)来显示文件名表中的数据,并且工作正常。

现在,我想将这些文件名连接到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;
    }

为了访问不公开的Blob,您需要使用“共享访问签名”,并创建在一段时间内有效的访问令牌(您可以选择),并且还可以按IP地址进行限制。

更多信息在这里:

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

由于它们不是公开的,因此您需要在将数据传递到视图之前添加一个附加步骤,该步骤将SAS令牌连接到Blob Uri。 您可以在此处找到一个很好的示例: http : //www.dotnetcurry.com/windows-azure/901/protect-azure-blob-storage-shared-access-signature

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM