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

msh*_*hwf 3 c# azure azure-storage

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

https://app.blob.core.windows.net/container/Accounts/Images/acc.jpg
Run Code Online (Sandbox Code Playgroud)

但是要删除它,我只需要传递blob名称即可

CloudBlockBlob blockBlob = Container.GetBlockBlobReference(uri);
Run Code Online (Sandbox Code Playgroud)

斑点的完整内容uri变为:

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

所以我得到了404错误(未找到),我可以对进行一些修整,uri但这似乎效率不高。那么有没有办法通过其完整URI删除Blob /获取引用?

小智 7

我确实遇到过类似的问题,因为我已经有了有效的容器引用,这对我有用:

CloudBlockBlob blockblob = container.GetBlockBlobReference(new CloudBlockBlob(blobUri).Name);
Run Code Online (Sandbox Code Playgroud)


moo*_*isy 6

可以CloudBlockBlob使用以下构造函数创建:

public CloudBlockBlob(Uri blobAbsoluteUri)
Run Code Online (Sandbox Code Playgroud)

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

CloudBlockBlob blob = new CloudBlockBlob(uri);
Run Code Online (Sandbox Code Playgroud)

如果Blob不是公开的,或者uri不包含SAS凭据(例如包含的SAS凭据),则可能需要使用您的凭据。在这种情况下,您将需要以下构造函数

public CloudBlockBlob(Uri blobAbsoluteUri, StorageCredentials credentials)
Run Code Online (Sandbox Code Playgroud)

正如陆肇星-微软在评论中所说,

公共访问权限是只读访问权限,需要指定存储帐户密钥或共享访问签名才能进行删除操作。


Dan*_*ook 5

现在,您可以使用该类BlobUriBuilder从 URI 安全地获取 blob 名称,而无需字符串解析或其他方法。

BlobUriBuilder blobUriBuilder = new BlobUriBuilder(new Uri(blobUri));
var sourceBlob = container.GetBlobClient(blobUriBuilder.BlobName);
Run Code Online (Sandbox Code Playgroud)