Microsoft Azure: jak utworzyć podkatalog w kontenerze obiektów blob

97

Jak utworzyć podkatalog w kontenerze obiektów blob

na przykład,

w moim kontenerze obiektów blob http://veda.blob.core.windows.net/document/

Jeśli przechowuję jakieś pliki, to będzie

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

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

Teraz, jak utworzyć podkatalog

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

Żeby móc przechowywać pliki

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

veda
źródło

Odpowiedzi:

138

Aby dodać coś do tego, co powiedział Egon, po prostu utwórz swój obiekt blob o nazwie „folder / 1.txt” i będzie działać. Nie ma potrzeby tworzenia katalogu.

user94559
źródło
3
jak filtrujesz lub pobierasz wszystkie te pliki z „folderu”?
afr0
2
To nie działa dla mnie, mówi, że kontenery nie mogą używać niczego poza małymi literami, łącznikami i cyframi. To samo dotyczy nazw plików
Green_qaue
@Green_qaue musisz używać tylko małych liter i cyfr do nazywania kontenera / katalogów i dlatego masz błędy.
Sapan Ghafuri
1
tworzy kilka katalogów z tym samym folderem, to znaczy za każdym razem, gdy przesyłam plik, tworzy ponownie katalog o nazwie „folder”, czy istnieje metoda sprawdzenia, czy folder istnieje, więc nie powinien go tworzyć?
amal50
@SapanGhafuri to nieprawda, możesz tworzyć katalogi zawierające wielkie litery
codah
36

W rzeczywistości jest tylko jedna warstwa pojemników. Możesz wirtualnie stworzyć „system plików”, taki jak wielowarstwowy magazyn danych, ale w rzeczywistości wszystko będzie w 1 warstwie, w kontenerze, w którym się znajduje.

Aby utworzyć wirtualny „system plików”, taki jak magazyn, możesz mieć nazwy obiektów blob zawierające znak „/”, dzięki czemu możesz robić, co chcesz, ze sposobem przechowywania. Wspaniałą rzeczą jest również to, że możesz szukać obiektu blob na poziomie wirtualnym, podając częściowy ciąg, aż do „/”.

Te dwie rzeczy, dodanie „/” do ścieżki i częściowego ciągu do wyszukiwania, razem tworzą wirtualną pamięć „systemu plików”.

Egon
źródło
Czy możesz udostępnić próbkę C #? blob.The name jest właściwością tylko do odczytu, więc nie możemy utworzyć obiektu blob.Name z „/”
ABB,
34

@ Afr0 zawiera komentarz z pytaniem, jak filtrować foldery.

Istnieją dwa sposoby użycia GetDirectoryReferencepętli lub przechodzenia przez obiekty blob kontenerów i sprawdzania typu. Poniższy kod jest w 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);
    }
}

przeczytaj to, aby uzyskać bardziej szczegółowe informacje: http://www.codeproject.com/Articles/297052/Azure-Storage-Blobs-Service-Working-with-Directori

AntonB
źródło
1
Taka powinna być odpowiedź na dzisiejszą datę. +1
MickyD
2
To dobra informacja, ale czy odpowiada „Jak utworzyć podkatalog w kontenerze obiektów blob”?
codah
20

W portalu Azure mamy poniżej opcję podczas wgrywania pliku:

wprowadź opis obrazu tutaj

Pritam
źródło
5

Nie musisz tworzyć podkatalogów. Wystarczy utworzyć pojemnik blob i nazwę pliku Zastosowanie takiego zmiennej nazwy pliku jak poniżej kodu:

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
Khabir
źródło
2

Jak wspomniano powyżej @Egon, w magazynie BLOB nie ma prawdziwego zarządzania folderami.

Niektóre funkcje systemu plików można osiągnąć, używając znaku „/” w nazwie pliku, ale ma to wiele ograniczeń (na przykład, co się stanie, jeśli konieczna będzie zmiana nazwy „folderu”?).

Generalnie chciałbym trzymać moje pliki w kontenerze tak płasko, jak to tylko możliwe , a moja aplikacja zarządzałaby dowolną strukturą, którą chcę udostępnić użytkownikom końcowym (na przykład zarządzać zagnieżdżoną strukturą folderów w mojej bazie danych , mieć rekord dla każdego plik, odwołując się do BLOB przy użyciu nazwy kontenera i nazwy pliku).

Assaf S.
źródło
1

Wystąpił podobny problem podczas wypróbowywania pierwszej aplikacji bezserwerowej Azure Sample .
Oto informacje o tym, jak rozwiązałem problem, usuwając \ na początku strony $ web.

Uwaga: kontener sieciowy $ został utworzony automatycznie przy włączonej statycznej witrynie internetowej. Nigdy nie widziałem kontenera $ 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
Nara
źródło
-2

Oto jak to zrobić w CoffeeScript na Node.JS:

blobService.createBlockBlobFromText 'containerName', (path + '$$$.$$$'), '', (err, result)->
    if err
        console.log 'failed to create path', err
    else
        console.log 'created path', path, result
Cees Timmerman
źródło
4
Pytanie jest oznaczone jakoC#
Rafael Herscovici
@Dementic Stąd moja wzmianka o CoffeeScript, który jest po prostu JavaScriptem bez kłamstwa. Nie powinno być zbyt trudne do przeniesienia do C #, zwłaszcza w porównaniu z akceptowaną odpowiedzią, która nie jest nawet w języku programowania.
Cees Timmerman,