python - 将 azure blob 下载到本地文件系统时发生异常

标签 python python-3.x azure azure-storage azure-blob-storage

将 azure blob 下载到本地文件系统时,出现以下异常:

Client-Request-ID=99bdb0e4-2d1c-11e8-8fe6-00155dbf7128 Retry policy did not allow for a retry: Server-Timestamp=Wed, 21 Mar 2018 15:29:09 GMT, Server-Request-ID=1e7ab8f5-101e-0076-5329-c16a24000000, HTTP status code=404, Exception=The specified blob does not exist.
ErrorCode: BlobNotFound<?xml version="1.0" encoding="utf-8"?><Error><Code>BlobNotFound</Code><Message>The specified blob does not exist.
RequestId:1e7ab8f5-101e-0076-5329-c16a24000000Time:2018-03-21T15:29:09.6565984Z</Message></Error>.
Traceback (most recent call last):
  File "C:\Program Files\Commvault\ContentStore\Automation\CloudApps\CloudAppsUtils\cahelper.py", line 483, in download_contents_azure
    session.get_blob_to_path(container_name,fl,fl)
  File "C:\Program Files\Python36\lib\site-packages\azure\storage\blob\baseblobservice.py", line 1817, in get_blob_to_path
    timeout)
  File "C:\Program Files\Python36\lib\site-packages\azure\storage\blob\baseblobservice.py", line 2003, in get_blob_to_stream
    raise ex
  File "C:\Program Files\Python36\lib\site-packages\azure\storage\blob\baseblobservice.py", line 1971, in get_blob_to_stream
    _context=operation_context)
  File "C:\Program Files\Python36\lib\site-packages\azure\storage\blob\baseblobservice.py", line 1695, in _get_blob
    operation_context=_context)
  File "C:\Program Files\Python36\lib\site-packages\azure\storage\common\storageclient.py", line 354, in _perform_request
    raise ex
  File "C:\Program Files\Python36\lib\site-packages\azure\storage\common\storageclient.py", line 289, in _perform_request
    raise ex
  File "C:\Program Files\Python36\lib\site-packages\azure\storage\common\storageclient.py", line 275, in _perform_request
    HTTPError(response.status, response.message, response.headers, response.body))
  File "C:\Program Files\Python36\lib\site-packages\azure\storage\common\_error.py", line 111, in _http_error_handler
    raise AzureHttpError(message, http_error.status)
azure.common.AzureMissingResourceHttpError: The specified blob does not exist.ErrorCode: BlobNotFound
<?xml version="1.0" encoding="utf-8"?><Error><Code>BlobNotFound</Code><Message>The specified blob does not exist.
RequestId:1e7ab8f5-101e-0076-5329-c16a24000000
Time:2018-03-21T15:29:09.6565984Z</Message></Error>

我使用以下代码来下载 blob:

def download_contents_azure(self, account_name, account_key, content):
    session=self.create_session_azure(account_name,account_key)
    os.mkdir('in place')
    os.chdir('in place')

    for item in content:
        # s = os.path.basename(item)

        path_to_file = ("/".join(item.strip("/").split('/')[1:]))
        container_name = Path(item).parts[1]
        gen = session.list_blobs(container_name)
        li = []

        for i in gen:
            li.append(i.name)

        if path_to_file in li:
            fl = os.path.basename(path_to_file)

            print(fl)
            c = self.splitall(item)

            for i in range(1,len(c)-1):
                if path.exists(c[i]) is False:
                    os.mkdir(c[i])
                os.chdir(c[i])

            session.get_blob_to_path(container_name,fl,fl)

            for i in range(1,len(c)-1):
                os.chdir("..")
        else:
            c = self.splitall(item)
            for i in range(1,len(c)):
                os.mkdir(c[i])
                os.chdir(c[i])

            generator = session.list_blobs(container_name,path_to_file+'/',delimiter='/')

            for blob in generator:
                bl = os.path.basename(blob.name)
                session.get_blob_to_path(container_name,bl,bl)

我在 azure 中有一条路径 (/container/folder/subfolder)。
我正在尝试下载子文件夹下的结构和所有文件。下载子文件夹下的第一个文件,然后出现上述异常。因此,我无法循环并打印下一个项目。

想法?

最佳答案

仔细检查您的线路 session.get_blob_to_path(container_name,fl,fl)

您有 blob_namefl

文档here指示第二个参数是 blob_name,而第三个参数是文件系统上要下载的文件路径。

我认为你的 blob 名称是错误的。因此它不存在。

注意:考虑安装fiddler这样你就可以查看网络痕迹。它允许您查看原始请求。

关于python - 将 azure blob 下载到本地文件系统时发生异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49410682/

相关文章:

python - 将水平存储的数据转置为多行

python - 为什么以下代码无法成功将所需文件移动到所需目录?

python - 为什么一个类的 __new__ 方法不在它的 __dict__ 中?

python - 更改 csv.DictReader 类型中字典键的值

python - 根据子字符串拆分列表

azure - 数据流 - Azure - isDecimal

node.js - 在 node.js 中编码/加密 Azure Log Analytics 授权 header

azure - 必应搜索API : specify filetype and site/domain?

java - 用于 Java 的 Python 集成开发环境

python - 如何使用 python 结构对远程服务器上存在的文件进行更改/编辑?