Azure Blob存储身份验证错误在子文件夹中为Blob创建SAS

时间:2019-06-07 13:37:40

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

我正在使用以下代码,使用户可以通过共享访问签名(SAS)访问我的Blob存储中的单个文件:

            var container = _blobClient.GetContainerReference(containerPath[0]);
            var blob = container.GetBlockBlobReference(blobName);

            var policy = new SharedAccessBlobPolicy()
            {
                SharedAccessStartTime = DateTimeOffset.UtcNow,
                SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
                Permissions = SharedAccessBlobPermissions.Read
            };

            var blobHeaders = new SharedAccessBlobHeaders();
            var sasToken = blob.GetSharedAccessSignature(policy, blobHeaders);

            return blob.Uri.AbsoluteUri + sasToken;

我正在创建的令牌已创建,但是它不起作用,出现以下错误:

  

签名不匹配。用于签名的字符串是r 2019-06-07T09:19:05Z 2019-06-08T09:19:05Z /blob/X/filestore/images/company/X.jpeg 2018-11-09 b

其中filestore/images/company/是目录,X.jpeg是我的文件名。 我的Blob容器是私有的。

我已经尝试过针对类似主题的问题提供的大多数选项,但不确定我要去哪里。我通过Azure门户为此Blob创建了一个共享访问签名,它工作得很好。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此后,我通过尝试使容器对象位于属性上方,发现在Azure存储中找不到我的容器和文件。这很奇怪,因为文件路径正确。 浏览时,我发现了这个answer

  

实际上只有一层容器。您实际上可以创建类似于分层存储的“文件系统”,但实际上,所有内容都将在1层(即其中的容器)中。

     

对于创建虚拟的“文件系统”(例如存储),您可以使用blob   包含“ /”的名称,以便您可以使用   您的存储方式。另外,很棒的是,您可以搜索斑点   在虚拟级别上,通过给出不完整的字符串(最多为'/')。

这意味着对于我的blob(filestore/images/company/x.jpg),容器只是filestore,blob名称为images/company/x.jpg,即使Azure Portal显示了子文件夹,实际结构也是平坦的

一旦我学会了这一点,便能够以完全相同的方式创建我的共享访问签名,但这一次它起作用了。