如何从本地python脚本上传文件到Azure容器?

23c0lvtd  于 2023-08-07  发布在  Python
关注(0)|答案(2)|浏览(108)

我尝试直接从我的python脚本(VSC)上传一个json文件到Azure blob容器。
以下是我尝试过的:

account_url = "https://containerxyz.blob.core.windows.net"
default_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(account_url, credential=default_credential)

container_name = 'https://containerxyz.blob.core.windows.net/a/b/raw/'

file = 'test.txt'
contents = 'test'
blob_client = blob_service_client.get_blob_client(container=container_name, blob=contents)
blob_client.upload_blob(name=file, data=contents, overwrite=True)

字符串
我甚至没有得到一个错误代码,它只是运行,从来没有停止,我最终中断内核后,几分钟。
同样的事情发生了,当我尝试它有点不同:

data = 'test'
container_client = blob_service_client.get_container_client(container=container_name)
container_client.upload_blob(name="test.txt", data=data, overwrite=True)


我试过遵循Azure文档,但他们总是使用本地文件并使用“with open(...)”将其上传到Azure的示例,例如:https://learn.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python
如果我在upload_blob()函数之前运行所有的东西,它运行时没有错误,所以我假设问题就在那里。

oxcyiej7

oxcyiej71#

我的帐户名是“containerxyz”,在该帐户中我有多个目录,我想上传blob到“/a/b/raw”。所以容器名是“a/B/raw”?我试过了,也遇到了同样的问题。
在本例中,容器名称为a。如果你想上传b/raw文件夹中的数据(这是虚拟BTW),你需要在blob的名称中包含它。
所以你的代码应该是这样的:

account_url = "https://containerxyz.blob.core.windows.net"
default_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(account_url, credential=default_credential)

container_name = 'a'

file = 'b/raw/test.txt'
contents = 'test'
blob_client = blob_service_client.get_blob_client(container=container_name, blob=file)
blob_client.upload_blob(name=file, data=contents, overwrite=True)

字符串

sg24os4d

sg24os4d2#

我甚至没有得到一个错误代码,它只是运行,从来没有停止,我最终中断内核后,几分钟
我同意Gaurav Mantri的评论,问题可能是使用了不正确的存储帐户或容器名称。
我在我的环境中尝试了正确的**account urlcontainer name**,它成功执行。

验证码:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

account_url = "https://<your-storage-account-name>.blob.core.windows.net"
default_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(account_url, credential=default_credential)
container_name = 'test1' #your-container-name
file = 'test.txt'
content=b"test"
blob_client = blob_service_client.get_blob_client(container=container_name, blob=file)
blob_client.upload_blob(data=content, overwrite=True)

print(f"File {file} uploaded to blob {blob_client.blob_name} in container {blob_client.container_name}")

字符串

输出:

File test.txt uploaded to blob test.txt in container test1


的数据

参考号:

Upload a blob with Python - Azure Storage | Microsoft Learn

相关问题