1

我正在尝试在本地使用 python 将 csv/pdf 文件上传到 azure blob 存储。

我关注了这篇文章,但这会引发错误,

from azure.storage.blob import BlockBlobService
from azure.storage.blob import ContentSettings

block_blob_service = BlockBlobService(account_name='account_name', account_key='key1')
block_blob_service.create_container('cn1')
block_blob_service.set_container_acl('cn1', public_access=PublicAccess.Container)

#Upload the CSV file to Azure cloud
block_blob_service.create_blob_from_path(
    'mycontainer',
    'C:/uploads/blob.csv',
    'C:/uploads/blob.pdf',
    content_settings=ContentSettings(content_type='application/CSV')
            )

上传后我想使用上传的文件来处理。

回溯(最近一次通话最后):

文件“”,第 1 行,在 block_blob_service.create_container('cn1')

文件“c:\users\rb287jd\appdata\local\programs\python\python36\lib\site-packages\azure\storage\blob\baseblobservice.py”,第 600 行,在 create_container self._perform_request(request)

_perform_request raise ex 中的文件“c:\users\rb287jd\appdata\local\programs\python\python36\lib\site-packages\azure\storage\storageclient.py”,第 280 行

_perform_request 中的文件“c:\users\rb287jd\appdata\local\programs\python\python36\lib\site-packages\azure\storage\storageclient.py”,第 252 行引发 AzureException(ex.args[0])

AzureException: HTTPSConnectionPool(host='account_name.blob.core.windows.net', port=443): 最大重试次数超出 url: /cn1?restype=container (由 ConnectTimeoutError(, 'Connection to account_name.blob.core. windows.net 超时。(连接超时=20)'))

4

2 回答 2

0

您能否尝试以下更改?

a) 添加缺少的导入:

from azure.storage.blob import PublicAccess

b) 如果您使用的是 Azure 存储模拟器,请按如下方式创建块 blob 服务:

block_blob_service = BlockBlobService(is_emulated=True)

c) 将容器名称更改为cn1而不是mycontainer,这是在代码早期创建的容器名称:

block_blob_service.create_blob_from_path(
    'cn1',
    'C:/temp/blob.csv',
    'C:/temp/blob.pdf',
    content_settings=ContentSettings(content_type='application/CSV'))

此外,请确保:

a) Azure 存储模拟器在您的本地测试期间运行。在https://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator查找更多详细信息。

b) 通过使用存储资源管理器 ( https://azure.microsoft.com/en-us/features/storage-explorer/ )打开您拥有正确的存储帐户名称和密钥。

在 Azure Storage Emulator 和 Azure 本身进行上述更改后,我能够使用适当的方法签名来创建块 blob 服务,从而使脚本正常工作。

于 2018-05-26T04:32:13.123 回答
0

如果查看错误: AzureException: HTTPSConnectionPool(host='account_name.blob.core.windows.net', port=443):

这意味着以下任何一种:

  1. 您的网址是 HTTP 而不是 HTTPS
  2. 您的帐户名不完全限定:应该是 http(s)://server ip 或 name/accountname
  3. 您正在使用模拟器并且未在连接中指定如下内容: blob_service=BlockBlobService(account_name=STORAGEACCOUNTNAME,account_key=STORAGEACCOUNTKEY, is_emulated=True, protocol='http')
于 2021-04-16T12:30:22.330 回答