代码之家  ›  专栏  ›  技术社区  ›  Alvin

python generate_signed_query_string blob返回错误的查询字符串

  •  0
  • Alvin  · 技术社区  · 12 年前

    我正在尝试使用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 .

    我应该如何解决这个问题?

    1 回复  |  直到 12 年前
        1
  •  2
  •   Gaurav Mantri    12 年前

    它看起来像是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上提交一个bug,以便负责维护代码的团队能够修复它。