Microsoft Azure: Як створити підкаталог у контейнері BLOB


97

Як створити підкаталог у контейнері 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

Відповіді:


137

Щоб додати те, що сказав Егон, просто створіть свою крапку під назвою "folder / 1.txt", і вона буде працювати. Не потрібно створювати каталог.


3
як ви фільтруєте або отримуєте всі ці файли з "папки"?
afr0

2
Це не працює для мене, каже, що контейнери не можуть використовувати нічого, крім малих літер, дефісів, цифр. Те саме стосується імен файлів
Green_qaue

@Green_qaue для іменування контейнера / каталогів потрібно використовувати лише малі літери та цифри, і тому у вас виникають помилки.
Сапан Гафурі,

1
він створює декілька каталогів з однією папкою, я маю на увазі щоразу, коли я завантажую файл, він знову створює каталог із назвою "папка", чи існує якийсь спосіб перевірити, чи існує папка, тому він не повинен її створювати?
amal50

@SapanGhafuri це неправда, ви можете створювати каталоги, що містять великі символи
codah

36

Насправді є лише один шар контейнерів. Ви можете віртуально створити "файлову систему" на зразок шаруватого сховища, але насправді все буде в 1 шарі - контейнері, в якому він знаходиться.

Для створення такої віртуальної "файлової системи", як сховище, ви можете мати імена BLOB, що містять '/', щоб ви могли робити те, що вам подобається, із способом зберігання. Крім того, чудова річ полягає в тому, що ви можете шукати краплину на віртуальному рівні, надаючи частковий рядок, до "/".

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


Чи можете ви поділитися зразком C #? blob.The властивість лише для читання, тому ми не можемо створити blob.Name з "/"
ABB

34

Коментар @ 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


1
Це має бути відповідь на сьогоднішню дату. +1
MickyD

2
Це гарна інформація, але чи відповідає вона "Як створити підкаталог у контейнері BLOB"?
codah

20

На порталі Azure під час завантаження файлу є наступний варіант:

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



4

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

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

2

Як згадувалось вище @Egon, справжнє управління папками у сховищі BLOB не існує.

Ви можете досягти деяких функцій файлової системи, використовуючи '/' в назві файлу, але це має багато обмежень (наприклад, що трапиться, якщо вам потрібно перейменувати "папку"?).

Як загальне правило, я зберігав би свої файли якомога рівніше в контейнері, і моє додаток би керувало будь-якою структурою, яку я хочу представити кінцевим користувачам (наприклад, керувати структурою вкладених папок у моїй базі даних , мати запис для кожного файл, посилаючись на BLOB, використовуючи ім'я контейнера та ім'я файлу).


1

Отримав подібну проблему під час випробування першого безсерверного додатка Azure Sample .
Ось інформація про те, як я вирішив, видаливши \ перед $ 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

-2

Ось як я це роблю в 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

4
Запитання позначено якC#
Рафаель Герсковічі

@Dementic Звідси моя згадка про CoffeeScript, який є просто JavaScript без суті. Не слід занадто важко переносити на C #, особливо порівняно з прийнятою відповіддю, яка навіть не в мові програмування.
Cees Timmerman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.