сгенерированный sas URL-адрес большого двоичного объекта отправляет неверный запрос 400 к лазурному ocr api - PullRequest
1 голос
/ 08 апреля 2019

Я загрузил несколько изображений в контейнер BLOB-объектов Azure для моего Azure OCR API, чтобы прочитать изображение и отправить обратно вывод.

Я удалил список BLOB-объектов из контейнера Azure, используя

 blob_service.list_blobs().

Каждый из этих удаленных больших двоичных объектов теперь передается в метод общего доступа

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 длякаждое изображение

URL-адрес, сгенерированный при передаче в Azure ocr api, показывает ошибку

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

Но когда URL-адрес создается вручную из портала Azure, он работает отлично.Может кто-нибудь помочь мне с этим вопросом?

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Вы получаете эту ошибку, потому что вы используете метод 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 голосов
/ 09 апреля 2019

В случае ошибки 404 при создании URL-адреса из блоба токена SAS необходимо создать токен SAS из BlobSharedAccesssignature.

Вот мой код:

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, который создает токен 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
...