webentwicklung-frage-antwort-db.com.de

Windows Azure: Erstellen eines Unterverzeichnisses in einem Blob-Container

So erstellen Sie ein Unterverzeichnis in einem Blob-Container

zum Beispiel,

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

So erstellen Sie ein Unterverzeichnis

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

Damit ich Dateien speichern kann

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

61
veda

Um zu dem hinzuzufügen, was Egon gesagt hat, erstellen Sie einfach Ihren Blob mit dem Namen "folder/1.txt", und es funktioniert. Es muss kein Verzeichnis erstellt werden.

95
smarx

Es gibt eigentlich nur eine einzige Schicht von Behältern. Sie können virtuell ein "Dateisystem" wie mehrlagige Speicherung erstellen, aber in Wirklichkeit befindet sich alles in einer Ebene, dem Container, in dem es sich befindet.

Um ein virtuelles "Dateisystem" wie Speicher zu erstellen, können Sie Blob-Namen mit einem "/" enthalten, damit Sie mit Ihrer Speicherung alles tun können, was Sie möchten. Das Tolle ist auch, dass Sie auf virtueller Ebene nach einem Blob suchen können, indem Sie einen Teilstring bis zu einem '/' angeben. 

Durch das Hinzufügen eines '/' zu einem Pfad und einer Teilzeichenfolge für die Suche wird ein virtueller "Dateisystem" -Speicher erstellt.

29
Egon

@ Afr0 fragt, wie man nach Ordnern filtert.

Es gibt zwei Möglichkeiten, GetDirectoryReference zu verwenden oder einen Container-Blobs durchzugehen 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 weitere Informationen: http://www.codeproject.com/Articles/297052/Azure-Storage-Blobs-Service-Working-with-Directori

24
AntonB

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

 enter image description here

7
Pritam

Wenn Sie Microsoft Azure Storage Explorer verwenden, gibt es eine Schaltfläche "Neuer Ordner", mit der Sie einen Ordner in einem Container erstellen können. Dies ist ein virtueller Ordner:

 enter image description here

2
Setyo N

Sie müssen kein Unterverzeichnis erstellen. Erstellen Sie einfach einen Blob-Container und verwenden Sie einen Dateinamen wie die Variable Dateiname 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
1
Khabir

Wie @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 (z. B. was passiert, wenn Sie einen "Ordner" umbenennen müssen?).

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

1
Assaf S.

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
0
Cees Timmerman

Beim Versuch mit Azure Sample first-serverless-app gab es ein ähnliches Problem.
Hier sind die Informationen darüber, wie ich durch Entfernen von\vor $ web aufgelöst wurde.

Hinweis: Der $ web-Container wurde automatisch erstellt, während die statische Website aktiviert wurde. Niemals gesehen $ root-Container.

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