python 程序从 Azure 文件共享读取文件时出现错误:“签名不匹配。用于签名的字符串为 r...”

问题描述 投票:0回答:1

我编写了以下 Python 代码,为放置在 Azure 文件共享目录中的文件生成 SAS 令牌:

def getParcelFilePath(webcountyval):
    filePath = rf"/plan/IN/{webcountyval}%20parcels.dbf"
    file_sas_token = generate_file_sas(
       account_name=os.environ["AZURE_STORAGE_ACCOUNT_NAME"],
       account_key=os.environ["AZURE_STORAGE_ACCOUNT_KEY"],
       share_name="dev",
       file_path=filePath,
       permission=AccountSasPermissions(read=True),
       expiry=datetime.datetime.now() + datetime.timedelta(hours=8),
       start=datetime.datetime.now()
     )

     filePathWithToken = os.environ["AZURE_STORAGE_SHARE_URL"] + filePath + "?" + file_sas_token
     return(filePathWithToken)

我住在中部时区。为了保证认证不失败,可以看到我给timedelta()函数传递了8个小时。

为该文件生成以下 URL: https://crestlinecapitalstorage.file.core.windows.net/dev/plan/IN/elkhart%20parcels.dbf?st=20 24-11-11T23%3A14%3A30Z&se=2024-11-12T07%3A14%3A30Z&sp=r&sv=2024-11-04&sr=f&sig=[redacted_sig]

当我将此 URL 粘贴到浏览器中时,它显示以下错误: 签名不匹配。使用的签名字符串为 r 2024-11-11T23:14:30Z 2024-11-12T07:14:30Z /file/crestlinecapitalstorage/dev/plan/IN/elkhart Parcels.dbf 2024-11-04

错误的原因可能是什么?

azure token azure-storage azure-file-share
1个回答
0
投票

file_path 值“/plan/in/{webcountyval}%20parcels.dbf”很可能不正确。开头的额外“/”可能不需要。不管怎样,我没有再花费噩梦般的时间尝试让带有 SAS 令牌的 URL 正常工作,而是找到了一个解决方法,它更容易使用和维护(请参阅 Google 搜索提供的 AI 概述)。

© www.soinside.com 2019 - 2024. All rights reserved.