sas生成的blob url向azure ocr api发送错误的请求400

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

我已经将一些图像上传到我的azure ocr api的azure blob容器中以读取图像并发回输出。

我已经从azure容器中使用了退回的blob列表

 blob_service.list_blobs().

现在,这些退役的blob中的每一个都被赋予共享访问方法

generate_blob_shared_access_signature(container_name='ocr-images',blob_name=blob.name,permission=PublicAccess.OFF,expiry='se=2015-04-30T02%3A23%3A26Z',start='st=2015-04-29T22%3A18%3A26Z')

共享访问方法的输出是SAS令牌,然后给予

blob_service.make_blob_url(container_name='ocr-images',blob_name=blob.name, sas_token=sas)

用于为每个图像生成URL

传递给Azure ocr api时生成的URL显示错误

requests.exceptions.HTTPError: 400 Client Error: Bad Request for url:https://westeurope.api.cognitive.microsoft.com/vision/v2.0/ocr?language=unk&detectOrientation=false

但是当从azure门户手动生成url时,它可以完美地工作。有人可以帮我解决这个问题吗?

python azure azure-blob-storage azure-sdk-python
2个回答
1
投票

您收到此错误是因为您错误地使用了generate_blob_shared_access_signature方法。

您传递给此方法的值存在许多问题。

对于permission,您需要提供BlobPermissions的可能值之一。假设您想要读取blob内容,我建议您使用BlobPermissions.READ权限。

您的开始和到期日期都是过去的。此外,您只需要指定日期值,而不是包括st=se=

请尝试使用以下代码:

generate_blob_shared_access_signature(container_name='ocr-images',blob_name=blob.name,permission=BlobPermissions.READ,expiry='2019-04-09',start='2019-04-08')

0
投票

如果在从SAS令牌blob创建URL时出现404错误,则需要从BlobSharedAccesssignature创建SAS令牌。

这是我的代码:

from azure.storage.blob import BlockBlobService
from azure.storage.blob.models import BlobPermissions
from azure.storage.blob.sharedaccesssignature import BlobSharedAccessSignature

account_name = data_dict['blob_storage_account_name']
account_key = data_dict['blob_storage_account_key']
top_level_container_name = data_dict['blob_container_name']
blob_service = BlockBlobService(account_name, account_key)
blob_shared = BlobSharedAccessSignature(account_name, account_key)

从BlobSharedAccessSignature获得对象后,调用generate_blob方法,该方法为容器中的单个blob创建sas标记

sas = blob_shared.generate_blob(container_name=top_level_container_name, blob_name=blob.name,
                                     permission=BlobPermissions.READ, expiry='2019-04-10',
                                     start='2019-04-09')   

sas_url= 'https://'+account_name+'.blob.core.windows.net'+'/'+top_level_container_name+'/'+blob.name+'?'+sas
© www.soinside.com 2019 - 2024. All rights reserved.