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

时间:2019-04-08 14:43:53

标签: python azure azure-blob-storage azure-sdk-python

我已将一些图像上传到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时,它可以完美运行。有人可以帮我解决这个问题吗?

2 个答案:

答案 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