Как загрузить файл хранилища BLOB-объектов Azure через URL-адрес в Python? - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь загрузить файл хранилища BLOB-объектов Azure из своей учетной записи хранения, для этого я проверил, что такое URL, и делаю следующее:

with urllib.request.urlopen("<url_file>") as resp:
    img = np.asarray(bytearray(resp.read()), dtype="uint8")

Но я получаю следующую ошибку:

urllib.error.HTTPError: HTTP Error 404: The specified resource does not exist.

Я дважды проверил, что URL правильный. Может ли это быть связано с тем, что вы не передали ключи моей подписки или другую информацию об учетной записи хранения?

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 26 июня 2019

Чтобы решить эту проблему, все, что мне нужно было сделать, это изменить уровень доступа к хранилищу BLOB-объектов на Blob (анонимный доступ на чтение только для BLOB-объектов).Как только это будет сделано, оно будет работать.

enter image description here

0 голосов
/ 26 июня 2019

На самом деле, вы можете сгенерировать URL-адрес большого двоичного объекта с токеном sas в Azure Storage SDK для Python для прямого доступа, как показано в примере ниже.

from azure.storage.blob.baseblobservice import BaseBlobService
from azure.storage.blob import BlobPermissions
from datetime import datetime, timedelta

account_name = '<account name>'
account_key = '<account key>'
container_name = '<container name>'
blob_name = '<blob name>'

url = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}"

service = BaseBlobService(account_name=account_name, account_key=account_key)
token = service.generate_blob_shared_access_signature(container_name, blob_name, permission=BlobPermissions.READ, expiry=datetime.utcnow() + timedelta(hours=1),)

url_with_sas = f"{url}?{token}"

Затем

import urllib
import numpy as np

req = urllib.urlopen(url_with_sas)
img = np.asarray(bytearray(req.read()), dtype=np.uint8)
0 голосов
/ 26 июня 2019

Для загрузки с использованием url напрямую, вы должны поместить большой двоичный объект в общедоступный контейнер или в личный контейнер, тогда вам нужно сгенерировать токен sas для большого двоичного объекта (URL выглядитнапример: https://xxx.blob.core.windows.net/aa1/0116.txt?sp=r&st=2019-06-26T09:47:04Z&se=2019-06-26xxxxx).

Я проверяю ваш код по URL-адресу, содержащему токен sas, его можно загрузить.

Результат теста:

enter image description here

Как создать токен sas для BLOB-объекта:

enter image description here

...