如何从Azure中的定位器获取SAS(共享访问签名)?

时间:2013-12-25 11:59:56

标签: azure

我正在使用Azure媒体服务。我试图通过创建一个定位器获取SAS,然后获取它的baseURI属性。我这样做的SAS是:

https://rfsstorage.blob.core.windows.net/asset-02b45419-74fd-48cc-bdb8-dd66e0d88055

但那真的是SAS吗?或者是别的什么?它肯定不适用于我从互联网上借用SAS的其他代码。 以下是我用来获取SAS的几行代码:

Public Sub OtainSAS(ByVal Filename As String)
        Dim mediaServicesAccountName As String = ConfigurationManager.AppSettings("accountname")
        Dim mediaServicesAccountKey As String = ConfigurationManager.AppSettings("accountkey")
        Dim mediaCloud As New CloudMediaContext(mediaServicesAccountName, mediaServicesAccountKey)
        Dim assetOptions As New AssetCreationOptions()
        Dim asset = mediaCloud.Assets.Create(Filename, assetOptions)

        Dim assetFile = asset.AssetFiles.Create(Filename)

        Dim accessPolicy = mediaCloud.AccessPolicies.Create(Filename, TimeSpan.FromDays(3), AccessPermissions.Write Or AccessPermissions.List)

        Dim locator As ILocator
        locator = mediaCloud.Locators.CreateLocator(LocatorType.Sas, asset, accessPolicy)

        gSasURL = locator.BaseUri

        locator.Delete()
        accessPolicy.Delete()
    End Sub

感谢。

1 个答案:

答案 0 :(得分:1)

上面的链接肯定不是SAS。如果您在此处阅读定位器文档:http://msdn.microsoft.com/en-us/library/windowsazure/hh974308.aspx#create_a_locator,您会注意到BaseUri定义为

  

提供商店/服务/容器的定位器的一部分   有关资产的信息。 (例如,Dns主机名   http://someservice.cloudapp.net

还有另一个名为ContentAccessComponent的属性,它作为定位器的一部分返回并包含SAS。所以在你的代码中你会这样做:

uploadSasUrl = locator.BaseUri & 'File Name' & locator.ContentAccessComponent

基本上你将连接BaseUri,正在上传的文件和ContentAccessComponent。试一试。

此外,我注意到,一旦获得定位器,您将删除访问策略。我认为你需要保持访问策略,直到blob上传为止。