我已将一些图像上传到azure blob容器中,以便我的azure ocr api读取图像并发送回输出。
我已使用
从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)
为每个图像生成网址
传递给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时,它可以完美运行。有人可以帮我解决这个问题吗?
答案 0 :(得分: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')
答案 1 :(得分:0)
如果从SAS令牌blob创建网址时发生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