Azure容器权限

时间:2017-06-15 20:01:10

标签: c# azure azure-storage azure-storage-blobs

我正在阅读article

我有一个名为&#34的天蓝色容器;测试"在azure中设置为private。 该容器中有一个scorm包" 121 / HEEDENNL / story.html"

我使用下面的代码设置要读取的文件夹的权限。 但是,该story.html文件需要其他几个文件才能正常运行。 故事页面打开,不会返回403或404。 但是它试图引用以使页面正常运行的文件没有加载。

如何才能获得story.html正常运行所需的所有文件,同时设置为读取权限?

我认为更改容器权限会允许该文件访问所需的文件。

我在这里缺少什么?

    public ActionResult ViewContent(int id)
    {
        const string pageBlobName = "121/HEEDENNL/story.html";

        CloudStorageAccount storageAccount = Common.Constants.Azure.ConnectionStringUrl;

        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        //// Retrieve a reference to a container.
        // CloudBlobContainer learningModulContainer = blobClient.GetContainerReference(Common.Constants.Azure.LearningModulesContainerName);
        CloudBlobContainer learningModulContainer = blobClient.GetContainerReference("test");

        PrintBlobs(learningModulContainer);

        CloudBlockBlob myindexfile =  learningModulContainer.GetBlockBlobReference(pageBlobName);

        SharedAccessBlobPermissions permission = SharedAccessBlobPermissions.None;
        permission = SharedAccessBlobPermissions.Read;


        var token = GetSasForBlob(myindexfile, permission,30);
        //this isn't finished.....must get learning module
        var module = DataAccessService.Get<LearningModule>(id);

        var url = $"{Common.Constants.Azure.StorageAccountUrl}{"test"}/{module.ScormPackage.Path.Replace("index_lms", "story")}{token}";

        return Redirect(token);
    }

 public static string GetSasForBlob(CloudBlockBlob blob, SharedAccessBlobPermissions permission, int sasMinutesValid)
    {
       // var sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
        var sasToken = blob.Container.GetSharedAccessSignature(new SharedAccessBlobPolicy()
        {
            Permissions = permission,
            SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-15),
            SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(sasMinutesValid),
        });
        return string.Format(CultureInfo.InvariantCulture, "{0}{1}", blob.Uri, sasToken);
    }

1 个答案:

答案 0 :(得分:0)

  

如何才能获得story.html正常运行所需的所有文件,同时设置为读取权限?

首先,如果可能,您可以将html页面引用的这些css&amp; js&amp; image等文件放在allow-public-access container中。

其次,你可以提供blob资源的URL with SAS,并在你的html页面中添加这样的引用。

<link href="https://{storageaccount}.blob.core.windows.net/styles/Style1.css?st=2017-06-15T02%3A27%3A00Z&se=2017-06-30T02%3A27%3A00Z&sp=r&sv=2015-04-05&sr=b&sig=%2FWwN0F4qyoIH97d7znRKo9lcp84S4oahU9RBwHTnlXk%3D" rel="stylesheet" />

此外,如果您想托管自己的网络应用,可以尝试使用Azure app service