尝试使用Python通过SAS_TOKEN上传blob到Azure
我正在尝试按照官方文档的指引(https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blob-upload-python)将一个文件上传到Azure。
我已经得到了网址和SAS_TOKEN,但我自己没有登录Azure去检查情况。
我希望能以同步的方式上传文件,但我安装的库似乎需要等待某些操作完成。官方文档看起来有点问题,比如在没有类的函数中却期待有一个self参数。
目前我把我的秘密信息保存在一个settings.py文件里。
import asyncio
import os
from azure.identity.aio import DefaultAzureCredential
from azure.storage.blob.aio import BlobServiceClient, BlobClient, ContainerClient
from settings import ACCOUNT_NAME, SAS_TOKEN, AZURE_CONTAINER_NAME
from pathlib import Path
def get_blob_service_client_sas(sas_token: str = SAS_TOKEN):
account_url = f"https://{ACCOUNT_NAME}.blob.core.windows.net"
blob_service_client = BlobServiceClient(account_url, credential=sas_token)
return blob_service_client
def upload_blob_file(blob_service_client: BlobServiceClient, container_name: str = AZURE_CONTAINER_NAME):
container_client = blob_service_client.get_container_client(container=container_name)
data = Path('demo.png').read_bytes()
container_client.upload_blob(name="demo.png", data=data, overwrite=True)
# Define another async function that calls the first one
async def main():
bsc = get_blob_service_client_sas()
print(bsc)
await upload_blob_file(blob_service_client=bsc)
# Run the async function from a synchronous context
asyncio.run(main())
这段代码出错了,错误信息是
TypeError: object NoneType can't be used in 'await' expression
如果能给我一个有效的上传文件的例子就太好了——即使是用curl代码、requests或者httpx的示例也行。
1 个回答
1
上传(之后再下载)。我现在要处理的真实文件大小是5GB,但目前我在用一个小文件进行测试。
如果你想把小文件上传到Azure的Blob存储,可以使用下面的代码。
代码:
from azure.storage.blob import BlobServiceClient
Account_name="venkat789"
sas_token="<sas-token>"
container_name="test"
account_url = f"https://{Account_name}.blob.core.windows.net"
blob_service_client = BlobServiceClient(account_url, credential=sas_token)
container_client = blob_service_client.get_container_client(container=container_name)
local_path = r"C:\users\bike.png"
blob_name = "example.png"
blob_client = container_client.get_blob_client(blob_name)
with open(local_path, "rb") as data:
blob_client.upload_blob(data)
输出:
如果你需要上传更大的文件,可以参考我在这个StackOverflow的帖子。
参考资料: 快速入门:Azure Blob存储的Python客户端库 - Azure存储 | Microsoft Learn