如何在 Python 中生成 Azure blob SAS URL?

Posted

技术标签:

【中文标题】如何在 Python 中生成 Azure blob SAS URL?【英文标题】:How can I generate an Azure blob SAS URL in Python? 【发布时间】:2020-10-12 19:55:54 【问题描述】:

我正在尝试使用 azure-storage-blob 包即时生成 blob SAS URL。 This solution 仅在您拥有现已弃用的 azure-storage 软件包时才有效,该软件包无法再安装。

我需要一种方法来模仿 BlockBlobService.generate_blob_shared_access_signature 的行为来生成 blob SAS URL,如下所示:

from datetime import datetime, timedelta
from azure.storage.blob import (
    BlockBlobService,
    ContainerPermissions,
    BlobPermissions,
    PublicAccess,
)

AZURE_ACC_NAME = '<account_name>'
AZURE_PRIMARY_KEY = '<account_key>'
AZURE_CONTAINER = '<container_name>'
AZURE_BLOB='<blob_name>'

block_blob_service = BlockBlobService(account_name=AZURE_ACC_NAME, account_key=AZURE_PRIMARY_KEY)
sas_url = block_blob_service.generate_blob_shared_access_signature(AZURE_CONTAINER,AZURE_BLOB,permission=BlobPermissions.READ,expiry= datetime.utcnow() + timedelta(hours=1))
print('https://'+AZURE_ACC_NAME+'.blob.core.windows.net/'+AZURE_CONTAINER+'/'+AZURE_BLOB+'?'+sas_url)

如果您有已弃用的软件包,上述解决方案有效,但我需要一个不需要它的解决方案。

【问题讨论】:

【参考方案1】:

看看下面的代码:

from datetime import datetime, timedelta
from azure.storage.blob import BlobClient, generate_blob_sas, BlobSasPermissions

account_name = 'STORAGE_ACCOUNT_NAME'
account_key = 'STORAGE_ACCOUNT_ACCESS_KEY'
container_name = 'CONTAINER_NAME'
blob_name = 'IMAGE_PATH/IMAGE_NAME'

def get_blob_sas(account_name,account_key, container_name, blob_name):
    sas_blob = generate_blob_sas(account_name=account_name, 
                                container_name=container_name,
                                blob_name=blob_name,
                                account_key=account_key,
                                permission=BlobSasPermissions(read=True),
                                expiry=datetime.utcnow() + timedelta(hours=1))
    return sas_blob

blob = get_blob_sas(account_name,account_key, container_name, blob_name)
url = 'https://'+account_name+'.blob.core.windows.net/'+container_name+'/'+blob_name+'?'+blob

查看此文档了解更多详情:link

【讨论】:

【参考方案2】:

请尝试以下代码:

from azure.storage.blob.sharedaccesssignature import BlobSharedAccessSignature
from datetime import datetime, timedelta

AZURE_ACC_NAME = '<account_name>'
AZURE_PRIMARY_KEY = '<account_key>'
AZURE_CONTAINER = '<container_name>'
AZURE_BLOB='<blob_name>'
expiry= datetime.utcnow() + timedelta(hours=1)

blobSharedAccessSignature = BlobSharedAccessSignature(AZURE_ACC_NAME, AZURE_PRIMARY_KEY)

sasToken = blobSharedAccessSignature.generate_blob(AZURE_CONTAINER, AZURE_BLOB, expiry=expiry, permission="r")

print sasToken

您可以在此处了解有关使用新存储 SDK 生成 SAS 令牌的更多信息:https://azure-storage.readthedocs.io/ref/azure.storage.blob.sharedaccesssignature.html

【讨论】:

这仍然是旧版 SDK 的一部分...我使用的是 v12。

以上是关于如何在 Python 中生成 Azure blob SAS URL?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Microsoft 示例在 Azure APIM 中生成 SAS

从 Azure autorest 中生成排除方法

从 Azure Blob 获取最新修改的文​​件

Azure Bot 脚本未保存

Azure Blob - 直接存储到存档层

使用 openxml 将行追加到 azure blob 存储中的 excel