Windows Azure: как создать подкаталог в контейнере BLOB-объектов - PullRequest
73 голосов
/ 12 апреля 2010

Как создать подкаталог в контейнере BLOB-объектов

например,

в моем контейнере BLOB-объектов 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

Ответы [ 9 ]

112 голосов
/ 12 апреля 2010

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

30 голосов
/ 12 апреля 2010

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

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

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

28 голосов
/ 05 января 2016

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

Существует два способа использования GetDirectoryReference или циклический просмотр контейнеров BLOB-объектов и проверка типа. Код ниже находится в 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

8 голосов
/ 08 ноября 2017

В портале Azure у нас есть опция ниже при загрузке файла:

enter image description here

3 голосов
/ 15 мая 2017

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

enter image description here

1 голос
/ 06 июня 2018

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

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

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

0 голосов
/ 22 июня 2019

Вам не нужно создавать подкаталог. Просто создайте контейнер BLOB-объектов и используйте имя файла, например, переменную filename , как показано ниже:

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
0 голосов
/ 01 июля 2018

Возникла похожая проблема при попытке попробовать 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
0 голосов
/ 19 февраля 2016

Вот как я делаю это в CoffeeScript на Node.JS:

blobService.createBlockBlobFromText 'containerName', (path + '$$$.$$$'), '', (err, result)->
    if err
        console.log 'failed to create path', err
    else
        console.log 'created path', path, result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...