Скачивание файла из блоба - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь загрузить файл из хранилища Azure.Я получаю ниже ошибки.Я использую Python 2.7.5 и Azure-Cli: 2.0.64.Но когда я использую sudo, он работает нормально.Может кто-нибудь, пожалуйста, помогите мне решить эту проблему?Заранее спасибо!

не может импортировать имя AzureException

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Класс AzureException определен в пакете azure-common, его исходный код можно увидеть по адресу здесь .

Мне нужно, чтобы вы провели какое-то тестирование в вашей среде.

  1. Проверьте текущую версию pip с помощью команды pip -V, токовый вывод должен быть таким, как pip 19.0.2 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7), если вы использовали Python 2.7.

  2. Проверьте, был ли установлен пакет azure-common, с помощью команды pip freeze, чтобы вывести список установленных пакетов в вашей среде Python, например, azure-common==1.1.18.

  3. Если вы написали свой код для загрузки BLOB-файла, обычно рекомендуется сначала создать виртуальную среду Python и активировать ее, чтобы избежать конфликта между различными пакетами, поскольку может существовать инструмент Python 3 pip как по умолчанию для Linux или других возможных проблем с вашим рабочим пространством.

  4. Если вы работали в виртуальной среде Python, для него не потребуется роль root или разрешение sudo. Попробуйте ввести команду ls -l, чтобы проверить разрешение файла вашего скрипта Python, результат будет выглядеть как -rwxrw-rw- 1 <your user name> 1049089 492 Apr 2 16:52 test.py. Вы можете обратиться к двум страницам ( 1 , 2 ), чтобы узнать больше подробностей о разрешениях для файлов Linux, и вы можете chmod it.

Полезная информация в вашем описании настолько меньше, что я не смогу предложить больше исправлений. Ожидается, что ваше сообщение об обновлении поможет быстро решить вашу проблему.

Любые обновления или проблемы, пожалуйста, дайте мне знать.

0 голосов
/ 14 мая 2019

Я добавляю пример кода для перебора структуры контейнера и папки и, наконец, загружаю файлы BLOB-объектов

from azure.storage.blob import BlockBlobService
from azure.storage.blob import PublicAccess
import os

#name of your storage account and the access key from Settings->AccessKeys->key1
block_blob_service = BlockBlobService(account_name='storageaccountname', account_key='AccountKey')

#name of the container
generator = block_blob_service.list_blobs('testcontainer')

#code below lists all the blobs in the container and downloads them one after another
for blob in generator:
    print(blob.name)
    print("{}".format(blob.name))
    #check if the path contains a folder structure, create the folder structure
    if "/" in "{}".format(blob.name):
        print("there is a path in this")
        #extract the folder path and check if that folder exists locally, and if not create it
        head, tail = os.path.split("{}".format(blob.name))
        print(head)
        print(tail)
        if (os.path.isdir(os.getcwd()+ "/" + head)):
            #download the files to this directory
            print("directory and sub directories exist")
            block_blob_service.get_blob_to_path('testcontainer',blob.name,os.getcwd()+ "/" + head + "/" + tail)
        else:
            #create the diretcory and download the file to it
            print("directory doesn't exist, creating it now")
            os.makedirs(os.getcwd()+ "/" + head, exist_ok=True)
            print("directory created, download initiated")
            block_blob_service.get_blob_to_path('testcontainer',blob.name,os.getcwd()+ "/" + head + "/" + tail)
    else:
        block_blob_service.get_blob_to_path('testcontainer',blob.name,blob.name)

Также вы упомянули о загрузке файла с помощью Azure cli, поэтому я пишу пример синтаксиса для этого

az storage file download \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --path "myDirectory/SampleUpload.txt" \
    --dest "~/clouddrive/SampleDownload.txt"

Пример кода

# Create a directory to store all the blobs
mkdir /downloaded-container && cd /downloaded-container

# Get all the blobs
BLOBS=$(az storage blob list -c $CONTAINER \
    --account-name $ACCOUNT_NAME --sas-token "$SAS_TOKEN" \
    --query [*].name --output tsv)

# Download each one
for BLOB in $BLOBS
do
  echo "********Downloading $BLOB"
  az storage blob download -n $BLOB -f $BLOB -c $CONTAINER --account-name $ACCOUNT_NAME --sas-token "$SAS_TOKEN"
done

Дополнительную информацию см. Ниже: doc

https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/storage/files/storage-how-to-use-files-cli.md

...