Как сгенерировать URL-адрес SAS для больших двоичных объектов Azure в Python?
Я пытаюсь на лету сгенерировать URL-адреса SAS для больших двоичных объектов, используя azure-storage-blob
пакет. Это решение работает только в том случае, если у вас установлен устаревшийazure-storage
пакет, который больше не может быть установлен.
Мне нужен способ имитировать поведение BlockBlobService.generate_blob_shared_access_signature
чтобы сгенерировать URL-адрес SAS большого двоичного объекта, например:
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)
Приведенное выше решение работает, если у вас есть устаревший пакет, но мне нужно решение, которое в нем не нуждается.
3 ответа
Пожалуйста, попробуйте следующий код:
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
Подробнее о создании токена SAS с помощью нового SDK хранилища можно узнать здесь: https://azure-storage.readthedocs.io/ref/azure.storage.blob.sharedaccesssignature.html.
Взгляните на следующий код:
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
Более подробную информацию можно найти в этой документации: ссылка
Принятый ответ не сработал для меня вazure-storage-blob==1.5.0
сPython 3.8.13
я должен был использоватьgenerate_blob_shared_access_signature
функция вместо этого. Документация .
from azure.storage.blob import BlockBlobService, BlobPermissions
from datetime import datetime, timedelta
azure_account_name = 'STORAGE_ACCOUNT_NAME'
azure_account_key = 'STORAGE_ACCOUNT_ACCESS_KEY'
def get_sas_url(container_name, blob_name):
block_blob_service = BlockBlobService(account_name=azure_account_name, account_key=azure_account_key)
sas_token = block_blob_service.generate_blob_shared_access_signature(container_name=container_name,
blob_name=blob_name,
permission=BlobPermissions(read=True),
expiry=datetime.utcnow() + timedelta(minutes=10))
return "https://"+azure_account_name+".blob.core.windows.net/"+container_name+"/"+blob_name+"?"+sas_token