Microsoft Azure: So erstellen Sie ein Unterverzeichnis in einem Blob-Container


93

So erstellen Sie ein Unterverzeichnis in einem Blob-Container

beispielsweise,

in meinem Blob-Container http://veda.blob.core.windows.net/document/

Wenn ich einige Dateien speichere, wird es sein

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

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

Nun, wie man ein Unterverzeichnis erstellt

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

Damit ich Dateien speichern kann

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

Antworten:


134

Um das zu ergänzen, was Egon gesagt hat, erstellen Sie einfach Ihren Blob mit dem Namen "folder / 1.txt", und es wird funktionieren. Sie müssen kein Verzeichnis erstellen.


3
Wie filtern oder erhalten Sie all diese Dateien aus "Ordner"?
Afr0

1
Dies funktioniert bei mir nicht, sagt, dass Container nichts anderes als Kleinbuchstaben, Bindestriche und Zahlen verwenden können. Gleiches gilt für Dateinamen
Green_qaue

@Green_qaue Sie müssen nur Kleinbuchstaben und Zahlen für die Benennung Ihrer Container / Verzeichnisse verwenden, und deshalb haben Sie Fehler erhalten.
Sapan Ghafuri

1
Es werden mehrere Verzeichnisse mit demselben Ordner erstellt. Ich meine, jedes Mal, wenn ich eine Datei hochlade, wird erneut ein Verzeichnis mit dem Namen "Ordner" erstellt. Gibt es eine Methode, um zu überprüfen, ob ein Ordner vorhanden ist, damit er nicht erstellt werden sollte?
Amal50

@SapanGhafuri das ist nicht wahr, Sie können Verzeichnisse mit Großbuchstaben erstellen
Codah

36

Es gibt eigentlich nur eine einzige Schicht von Containern. Sie können virtuell ein "Dateisystem" wie einen geschichteten Speicher erstellen, aber in Wirklichkeit befindet sich alles in einer Schicht, dem Container, in dem es sich befindet.

Um ein virtuelles "Dateisystem" wie Speicher zu erstellen, können Sie Blob-Namen mit einem '/' verwenden, damit Sie mit der Art und Weise, wie Sie speichern, tun können, was Sie möchten. Das Tolle ist auch, dass Sie auf virtueller Ebene nach einem Blob suchen können, indem Sie eine Teilzeichenfolge bis zu einem '/' angeben.

Diese beiden Dinge, die ein '/' zu einem Pfad und eine Teilzeichenfolge für die Suche hinzufügen, bilden zusammen einen virtuellen "Dateisystem" -Speicher.


Können Sie ein C # -Beispiel teilen? blob.Der Name ist schreibgeschützt Eigenschaft, so dass wir nicht in der Lage sind, einen blob.Name mit "/"
ABB

34

In einem Kommentar von @ afr0 wird gefragt, wie nach Ordnern gefiltert werden soll.

Es gibt zwei Möglichkeiten, die GetDirectoryReferenceBlobs eines Containers zu verwenden oder den Typ zu durchlaufen und den Typ zu überprüfen. Der folgende Code ist in 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);
    }
}

Lesen Sie dies für eine ausführlichere Beschreibung: http://www.codeproject.com/Articles/297052/Azure-Storage-Blobs-Service-Working-with-Directori


1
Dies sollte die Antwort zum heutigen Datum sein. +1
MickyD

1
Es ist eine gute Information, aber antwortet es 'Wie erstelle ich ein Unterverzeichnis in einem Blob-Container'?
Codah

19

In Azure Portal haben wir beim Hochladen der Datei die folgende Option:

Geben Sie hier die Bildbeschreibung ein



4

Sie müssen kein Unterverzeichnis erstellen. Erstellen Sie einfach einen Blob-Container und verwenden Sie den Dateinamen wie den variablen Dateinamen wie folgt:

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

Wie oben bei @Egon erwähnt, gibt es im BLOB-Speicher keine echte Ordnerverwaltung.

Sie können einige Funktionen eines Dateisystems mit '/' im Dateinamen erreichen, dies hat jedoch viele Einschränkungen (was passiert beispielsweise, wenn Sie einen "Ordner" umbenennen müssen?).

In der Regel würde ich meine Dateien in einem Container so flach wie möglich halten und meine Anwendung die Struktur verwalten lassen, die ich den Endbenutzern zur Verfügung stellen möchte (z. B. eine verschachtelte Ordnerstruktur in meiner Datenbank verwalten , für jede einen Datensatz haben Datei, die mit Containername und Dateiname auf das BLOB verweist).


0

Beim Testen der Azure Sample First-Serverless-App ist ein ähnliches Problem aufgetreten .
Hier ist die Information, wie ich durch Entfernen von \ vor $ web gelöst habe.

Hinweis: $ web container wurde automatisch erstellt, während die statische Website aktiviert wurde. Nie $ root Container irgendwo gesehen.

//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

-1

So mache ich das in CoffeeScript auf Node.JS:

blobService.createBlockBlobFromText 'containerName', (path + '$$$.$$$'), '', (err, result)->
    if err
        console.log 'failed to create path', err
    else
        console.log 'created path', path, result

3
Die Frage ist markiert alsC#
Dementic

@Dementic Daher meine Erwähnung von CoffeeScript, das nur JavaScript ohne Cruft ist. Es sollte nicht zu schwierig sein, auf C # zu portieren, insbesondere im Vergleich zu der akzeptierten Antwort, die nicht einmal in einer Programmiersprache vorliegt.
Cees Timmerman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.