通过完整的Uri而不是blob名称获取Azure blob的引用?

时间:2017-02-16 14:42:48

标签: c# azure azure-storage

我以这种形式将文件的uri保存在数据库中:

https://app.blob.core.windows.net/container/Accounts/Images/acc.jpg

但要删除它我只需传递blob名称, 我试试这个时

CloudBlockBlob blockBlob = Container.GetBlockBlobReference(uri);

blob的完整uri变为:

https://app.blob.core.windows.net/container/https://app.blob.core.windows.net/container/Accounts/Images/acc.jpg

所以我得到404错误(找不到), 我可以对uri做一些修剪,但这看起来并不高效。 那么有没有办法通过其完整的URI删除blob / get引用?

3 个答案:

答案 0 :(得分:6)

可以使用此constructor创建CloudBlockBlob

public CloudBlockBlob(Uri blobAbsoluteUri)

在您的情况下,假设uri是Uri类型而不仅仅是字符串:

CloudBlockBlob blob = new CloudBlockBlob(uri);

如果blob不公开,或者uri不包含SAS凭据(比如您包含的凭据),则可能需要使用凭据。在这种情况下,您需要constructor

public CloudBlockBlob(Uri blobAbsoluteUri, StorageCredentials credentials)

Zhaoxing Lu - Microsoft所述,评论

  

公共访问是只读访问,需要指定存储   帐户密钥或共享访问签名用于删除操作。

答案 1 :(得分:6)

我确实面临过类似的问题,因为我已经有了有效的容器参考,这对我有用:

CloudBlockBlob blockblob = container.GetBlockBlobReference(new CloudBlockBlob(blobUri).Name);

答案 2 :(得分:-1)

您的问题是,使用以下定义的功能GetBlockBlobReference将URI字符串放入Blob名称中:public virtual CloudBlockBlob GetBlockBlobReference(string blobName); 。您将使用月雏菊溶液。