我已经将一些图像上传到我的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时,它可以完美地工作。有人可以帮我解决这个问题吗?
您收到此错误是因为您错误地使用了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')
如果在从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