如何使用SAS从存储URL获取Azure CloudBlockBlob?

如何使用SAS从存储URL获取Azure CloudBlockBlob?,azure,azure-storage,azure-storage-blobs,Azure,Azure Storage,Azure Storage Blobs,我正在尝试重构我们的MVC代码,它有很多页面,这些页面利用了指向SAS的blob的下载url。如果能够将Url传递给控制器并使用它来定位关联的Blob,那就太好了。例如,有一个将下载Url作为其唯一输入参数的操作。我还可以创建一个链接帮助器,仅在SAS公开delete等时显示delete链接 如果我能将Url传递到Azure并得到一个CloudBlockBlob作为回报,那将是一个很大的帮助。所以我可以删除它,更新它,获取元数据等等 目前我唯一能做到的方法就是使用类似的技术 var d

我正在尝试重构我们的MVC代码,它有很多页面,这些页面利用了指向SAS的blob的下载url。如果能够将Url传递给控制器并使用它来定位关联的Blob,那就太好了。例如,有一个将下载Url作为其唯一输入参数的操作。我还可以创建一个链接帮助器,仅在SAS公开delete等时显示delete链接

如果我能将Url传递到Azure并得到一个CloudBlockBlob作为回报,那将是一个很大的帮助。所以我可以删除它,更新它,获取元数据等等

目前我唯一能做到的方法就是使用类似的技术

     var deleteBlobRequest = BlobRequest.Delete(new Uri(fileUrl), 30, null, DeleteSnapshotsOption.IncludeSnapshots, "");
     deleteBlobRequest.GetResponse().Close();
这是可行的,但似乎很奇怪

我想不出从Uri获取CloudBlockBlob的代码


有什么想法吗?我目前正在使用Azure Storage 1.7

以下是获取SAS密钥权限的代码(假设blobUrl是带有SAS密钥的url):

这将基于带有SAS键的URL获得一个ICloudBlob(假设blobUrl是带有SAS键的URL):


下面是获取SAS密钥权限的代码(假设blobUrl是带有SAS密钥的url):

这将基于带有SAS键的URL获得一个ICloudBlob(假设blobUrl是带有SAS键的URL):


你不必做任何特别的事。如果使用SAS Uri构建blob,则存储客户机库将为您解决这一问题。例如,以以下代码为例:

        CloudBlockBlob cloudBlockBlob = new CloudBlockBlob("http://127.0.0.1:10000/devstoreaccount1/temp/sastest.txt?sr=b&st=2013-01-25T04%3A28%3A09Z&se=2013-01-25T05%3A28%3A09Z&sp=rwd&sig=jIWWFwZ6MXaL6FD%2F2%2FpqPl1g4f0ElFrr1fKNg5U%2FAkg%3D");
        cloudBlockBlob.Delete();

这很好。

你不必做任何特别的事情。如果使用SAS Uri构建blob,则存储客户机库将为您解决这一问题。例如,以以下代码为例:

        CloudBlockBlob cloudBlockBlob = new CloudBlockBlob("http://127.0.0.1:10000/devstoreaccount1/temp/sastest.txt?sr=b&st=2013-01-25T04%3A28%3A09Z&se=2013-01-25T05%3A28%3A09Z&sp=rwd&sig=jIWWFwZ6MXaL6FD%2F2%2FpqPl1g4f0ElFrr1fKNg5U%2FAkg%3D");
        cloudBlockBlob.Delete();

这很好。

这是使用v2存储客户端吗?是的,但要获得权限列表,我只需解析查询字符串,而不需要您使用SDK。谢谢您的权限位。我正在努力获取这个文件。只是我似乎无法创建ICloudBlob或找到GetBlobReferenceFromServer。我假设这是因为我在1.7上进行存储。这是在使用v2存储客户端吗?是的,但要获得权限列表,我只需解析查询字符串,而不需要您使用SDK。谢谢您的权限位。我正在努力获取这个文件。只是我似乎无法创建ICloudBlob或找到GetBlobReferenceFromServer。我想这是因为我使用的是1.7的存储,非常好用。奇怪,我想我试过了。可能是在我正确获得sig(包括删除权限)之前。效果很好。奇怪,我想我试过了。也许是在我拥有正确的sig(包括删除权限)之前。
        CloudBlockBlob cloudBlockBlob = new CloudBlockBlob("http://127.0.0.1:10000/devstoreaccount1/temp/sastest.txt?sr=b&st=2013-01-25T04%3A28%3A09Z&se=2013-01-25T05%3A28%3A09Z&sp=rwd&sig=jIWWFwZ6MXaL6FD%2F2%2FpqPl1g4f0ElFrr1fKNg5U%2FAkg%3D");
        cloudBlockBlob.Delete();