我正在尝试从存储帐户下载Azure Blob存储文件,为此,我已经检查了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.
我已经仔细检查了网址是否正确。这可能与未传递我的订阅密钥或有关存储帐户的任何其他信息有关吗?
有什么主意吗?
答案 0 :(得分:0)
要直接使用url下载,应将blob放在公共容器中,或将其放入私有容器中,然后为blob生成一个sas令牌(网址看起来像:https://xxx.blob.core.windows.net/aa1/0116.txt?sp=r&st=2019-06-26T09:47:04Z&se=2019-06-26xxxxx)。
我使用包含sas令牌的网址测试您的代码,可以将其下载。
测试结果:
如何为Blob生成sas令牌:
答案 1 :(得分:0)
答案 2 :(得分:0)
实际上,您可以在适用于Python的Azure存储SDK中生成带有sas令牌的blob URL,以供直接访问,如下面的示例代码所示。
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)
答案 3 :(得分:0)
截至2019年12月26日,我无法从Azure云存储中导入BaseBlobService。 BlobPermissions和generate_blob_shared_access_signature都不适合我。以下是我使用过的东西,可以在我的情况下使用,希望对您有帮助
from azure.storage.blob import generate_blob_sas, AccountSasPermissions
def scan_product():
account_name=<account_name>
container_name=<container_name>
blob_name=<blob_name>
account_key=<account_key>
url = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}"
sas_token = generate_blob_sas(
account_name=account_name,
account_key=account_key,
container_name=container_name,
blob_name=blob_name,
permission=AccountSasPermissions(read=True),
expiry=datetime.utcnow() + timedelta(hours=1)
)
url_with_sas = f"{url}?{sas_token}"