0

我正在尝试使用 Python SDK 在私有 Azure blob 存储容器中共享一个 blob,下面是代码:

try:
        accss_plcy = AccessPolicy()
        accss_plcy.start = '2013-03-12'
        accss_plcy.expiry = '2013-03-13'
        accss_plcy.permission = 'r'
        signed_identifier = 'YWJjZGVmZw=='
        sap = SharedAccessPolicy(accss_plcy, signed_identifier)
        qry_str = sas.generate_signed_query_string('picture/xxx.jpg','blob', sap)
    except Exception as ex:
        abort(400, 'Download blob fail %s'%ex)
    return sas._convert_query_string(qry_str)

以下是查询字符串返回:

st=2013-03-12&se=2013-03-13&sp=r&resource=blob&sig=FI88prUINf58Seg5Nwo6Uj5RP9FxXGZBBSKi7pybmeQ=&

您可能会注意到这一点resource=blob,但它应该会返回sr=b

我应该如何解决问题?

4

1 回答 1

2

它看起来像 SDK 中的一个错误。由于 Azure SDK 的代码是开源的,您可以下载代码并更改此文件:https ://github.com/WindowsAzure/azure-sdk-for-python/blob/master/src/azure/storage /sharedaccesssignature.py。查看该文件中的源代码,您需要更改以下代码行(第 129 行):

convert_str += SIGNED_RESOURCE_TYPE + '=' + query_string[SIGNED_RESOURCE] + '&'

convert_str += SIGNED_RESOURCE + '=' + query_string[SIGNED_RESOURCE] + '&'

我还注意到您在blob上面的代码中作为资源类型传递:

qry_str = sas.generate_signed_query_string('picture/xxx.jpg','blob', sap)

您需要传递 'b' 而不是 'blob'

qry_str = sas.generate_signed_query_string('picture/xxx.jpg','b', sap)

我认为这应该可以解决问题。另外请确保您在 Github 上提交错误,以便负责维护代码的团队可以修复它。

于 2013-03-12T14:00:51.997 回答