Microsoft Azure: как создать подкаталог в контейнере больших двоичных объектов

Как создать подкаталог в контейнере больших двоичных объектов

Например,

в моем контейнере больших двоичных объектов http://veda.blob.core.windows.net/document/

Если я сохраню несколько файлов, это будет

http://veda.blob.core.windows.net/document/1.txt

http://veda.blob.core.windows.net/document/2.txt

Теперь, как создать подкаталог

http://veda.blob.core.windows.net/document/folder/

Чтобы я мог хранить файлы

http://veda.blob.core.windows.net/document/folder/1.txt


person veda    schedule 11.04.2010    source источник


Ответы (11)


Чтобы добавить к тому, что сказал Эгон, просто создайте свой blob-объект с именем «folder / 1.txt», и он будет работать. Нет необходимости создавать каталог.

person user94559    schedule 12.04.2010
comment
как вы фильтруете или получаете все эти файлы из папки? - person afr0; 16.10.2015
comment
Это не работает для меня, говорит, что контейнеры не могут использовать ничего, кроме строчных букв, дефисов и цифр. То же самое для имен файлов - person Green_qaue; 03.02.2017
comment
@Green_qaue, вы должны использовать только строчные буквы и цифры для именования вашего контейнера / каталогов, и поэтому у вас есть ошибки. - person Sapan Ghafuri; 04.03.2017
comment
он создает несколько каталогов с одной и той же папкой, я имею в виду, что каждый раз, когда я загружаю файл, он снова создает каталог, называемый папкой, есть ли какой-либо способ проверить, существует ли папка, чтобы не создавать ее? - person amal50; 03.05.2018
comment
@SapanGhafuri это неправда, вы можете создавать каталоги, содержащие символы верхнего регистра - person codah; 01.07.2020

На самом деле существует только один слой контейнеров. Вы можете виртуально создать «файловую систему» ​​наподобие многоуровневого хранилища, но на самом деле все будет в одном слое, в контейнере, в котором оно находится.

Для создания виртуальной «файловой системы», подобной хранилищу, вы можете иметь имена больших двоичных объектов, содержащие '/', чтобы вы могли делать все, что захотите, с тем, как вы храните. Кроме того, замечательно то, что вы можете искать blob-объект на виртуальном уровне, задавая частичную строку до символа '/'.

Эти две вещи, добавление символа «/» к пути и частичной строки для поиска, вместе создают виртуальное хранилище «файловой системы».

person Egon    schedule 11.04.2010
comment
Вы можете поделиться образцом C #? blob.name является свойством только для чтения, поэтому мы не можем создать blob.Name с / - person Ashutosh B Bodake; 08.08.2017

Есть комментарий @ afr0, в котором спрашивается, как фильтровать папки.

Есть два способа использовать GetDirectoryReference или перебирать капли контейнера и проверять тип. Код ниже находится на C #

CloudBlobContainer container = blobClient.GetContainerReference("photos");

//Method 1. grab a folder reference directly from the container
CloudBlobDirectory folder = container.GetDirectoryReference("directoryName");

//Method 2. Loop over container and grab folders.
foreach (IListBlobItem item in container.ListBlobs(null, false))
{
    if (item.GetType() == typeof(CloudBlobDirectory))
    {
        // we know this is a sub directory now
        CloudBlobDirectory subFolder = (CloudBlobDirectory)item;

        Console.WriteLine("Directory: {0}", subFolder.Uri);
    }
}

прочтите это для получения более подробной информации: http://www.codeproject.com/Articles/297052/Azure-Storage-Blobs-Service-Working-with-Directori

person AntonB    schedule 04.01.2016
comment
Это должен быть ответ на сегодняшний день. +1 - person MickyD; 13.02.2017
comment
Это хорошая информация, но отвечает ли она «Как создать подкаталог в контейнере больших двоичных объектов»? - person codah; 09.06.2020

На портале Azure у нас есть следующий вариант при загрузке файла:

введите описание изображения здесь

person Pritam    schedule 08.11.2017

Если вы используете Microsoft Azure Storage Explorer, есть кнопка «Новая папка», которая позволяет создать папку в контейнере. . На самом деле это виртуальная папка:

введите описание изображения здесь

person Setyo N    schedule 15.05.2017

Вам не нужно создавать подкаталог. Просто создайте контейнер больших двоичных объектов и используйте имя файла, например переменную имя_файла, как показано ниже:

string filename = "document/tech/user-guide.pdf";
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConnectionString);
CloudBlockBlob blob = cloudBlobContainer.GetBlockBlobReference(filename);
blob.StreamWriteSizeInBytes = 20 * 1024;
blob.UploadFromStream(fileStream); // fileStream is System.IO.Stream
person Khabir    schedule 22.06.2019

Как упоминал @Egon выше, в хранилище больших двоичных объектов нет реального управления папками.

Вы можете добиться некоторых функций файловой системы, используя '/' в имени файла, но это имеет множество ограничений (например, что произойдет, если вам нужно переименовать «папку»?).

Как правило, я бы держал свои файлы как можно более плоскими в контейнере, а мое приложение управляло любой структурой, которую я хочу предоставить конечным пользователям (например, управлять структурой вложенных папок в моей базе данных иметь запись для каждого файла, ссылающуюся на большой двоичный объект, используя имя-контейнера и имя-файла).

person Assaf S.    schedule 06.06.2018

Хотел также добавить портал пользовательского интерфейса. Если вы хотите создать структуру папок, вам нужно будет сделать это с полным путем для каждого файла.

введите описание изображения здесь

Вам нужно нажать «Загрузить BLOB-объект», развернуть «Дополнительно» и указать путь «Загрузить в папку».

Итак, допустим, у вас есть активы папки, которые вы хотите загрузить, и содержимое папки выглядит так, как показано ниже.

введите описание изображения здесь

И если у вас есть папка в папке js с именем main.js, вам нужно ввести путь assets / js в загрузке в папку. Теперь это нужно сделать для каждого файла. Если у вас много файлов, рекомендуется делать это программно.

person Prateek Mishra    schedule 03.12.2020

Возникла аналогичная проблема при использовании образца Azure first-serverless-app.
Вот информация о том, как я решил, удалив \ перед $ web.

Примечание. Контейнер $ web был создан автоматически при включении статического веб-сайта. Никогда нигде не видел $ root-контейнера.

//getting Invalid URI error while following tutorial as-is
az storage blob upload-batch -s . -d \$web --account-name firststgaccount01

//Remove "\" @destination param
az storage blob upload-batch -s . -d $web --account-name firststgaccount01
person Nara    schedule 01.07.2018

Мне нужно было сделать это из конвейера Jenkins, поэтому нужно было загружать файлы в определенное имя папки, но не в корневую папку контейнера. Я использую --destination-path, это может быть папка или папка1 / папка2

az storage blob upload-batch --account-name $AZURE_STORAGE_ACCOUNT --destination ${CONTAINER_NAME} --destination-path ${VERSION_FOLDER} --source ${BUILD_FOLDER} --account-key $ACCESS_KEY

надеюсь, что это поможет кому-то

person Oswaldo Zapata    schedule 17.02.2021