在给定时间内,SharedAccessBlobPolicy未过期 - AZURE

时间:2014-05-13 20:47:12

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

有很多关于Shared Access Signature的例子,但我仍然无法弄清楚我的代码有什么问题。

我尝试做的是,我正在尝试为blob创建可下载的链接并将其显示给用户。例子通常是关于如何让它保持活力。我正在寻找如何使它过期。

我能够创建可下载链接并且它正在运行,但它在给定时间内没有过期。 我创建了SharedAccessBlobPolicy并设置了SharedAccessExpiryTime属性,但它没有按时到期。

例如,如果我将其设置为5分钟,则在30分钟后仍然可以正常工作。

SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
                     {                  
                      SharedAccessExpiryTime =  DateTime.UtcNow.AddMinutes(5),
                      Permissions = SharedAccessBlobPermissions.Read
                      };

这是我的代码:

string blobName = "test.txt"; //just for an example

CloudStorageAccount account = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("myConnectionString"));
CloudBlobClient client = account.CreateCloudBlobClient();  


// Build shared access signature
CloudBlobContainer container = client.GetContainerReference(ConfigurationManager.AppSettings.Get("myContainerReference"));
container.CreateIfNotExists();


////Get a reference to a blob within the container.

//Create a new stored access policy and define its constraints.
SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
                 {                  
                  SharedAccessExpiryTime =  DateTime.UtcNow.AddMinutes(5),
                  Permissions = SharedAccessBlobPermissions.Read
                  };


//Get the container's existing permissions.
BlobContainerPermissions permissions = new BlobContainerPermissions();

// The public access setting explicitly specifies that the container is private, 
// so that it can't be accessed anonymously.
permissions.PublicAccess = BlobContainerPublicAccessType.Off;

//Add the new policy to the container's permissions.
string policyName = "myPolicy";

permissions.SharedAccessPolicies.Clear();   
permissions.SharedAccessPolicies.Add(policyName,sharedPolicy);
container.SetPermissions(permissions);

CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
string sasBlobToken = blob.GetSharedAccessSignature(null, policyName);  
string downloadLink = blob.Uri + sasBlobToken;

downloadLink应该工作5分钟,但它永远不会消亡。 (我打赌它会死掉,但不知道什么时候会死掉)

P.S。我不是在这里共享整个代码,只是FYI没有调试错误或任何其他类型的错误。它作为可下载的链接工作得很好。它只是在给定的时间内没有到期。

我无法弄清楚我错过了什么。谢谢你的关注

1 个答案:

答案 0 :(得分:5)

我刚试了这个,5分钟后我的链接就过期了。请检查浏览器是否未缓存该文件。如果是这种情况,那么您将继续查看文件,因为每次请求都不会从存储服务中获取这些文件。相反,它们仅通过浏览器缓存提供。