web-dev-qa-db-fra.com

Windows Azure: Comment créer un sous-répertoire dans un conteneur d'objets blob

Comment créer un sous-répertoire dans un conteneur d'objets blob

par exemple,

dans mon conteneur d'objet blob http://veda.blob.core.windows.net/document/

Si je stocke des fichiers, ce sera

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

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

Maintenant, comment créer un sous-répertoire

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

Pour que je puisse stocker des fichiers

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

61
veda

Pour ajouter à ce que Egon a dit, créez simplement votre blob appelé "folder/1.txt", et cela fonctionnera. Pas besoin de créer un répertoire.

95
smarx

Il n'y a en réalité qu'une seule couche de conteneurs. Vous pouvez créer virtuellement un "système de fichiers" comme un stockage en couches, mais en réalité, tout se trouvera dans une couche, le conteneur dans lequel il se trouve.

Pour créer un "système de fichiers" virtuel comme le stockage, vous pouvez avoir des noms d'objet blob contenant un "/" afin de pouvoir faire ce que vous voulez avec la façon dont vous stockez. En outre, l’atout majeur est que vous pouvez rechercher un blob à un niveau virtuel, en donnant une chaîne partielle, jusqu’à un '/'. 

Ces 2 éléments, en ajoutant un "/" à un chemin et une chaîne partielle pour la recherche, créent ensemble un stockage "système de fichiers" virtuel.

29
Egon

Il y a un commentaire de @ afr0 qui demande comment filtrer les dossiers.

Il existe deux manières d'utiliser la variable GetDirectoryReference ou de parcourir les blobs de conteneurs et de vérifier le type. Le code ci-dessous est en 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);
    }
}

lisez ceci pour une couverture plus approfondie: http://www.codeproject.com/Articles/297052/Azure-Storage-Blobs-Service-Working-Working-with-Directori

24
AntonB

Dans le portail Azure, nous avons l'option ci-dessous lors du téléchargement du fichier:

 enter image description here

7
Pritam

Si vous utilisez Microsoft Azure Storage Explorer , un bouton "Nouveau dossier" vous permet de créer un dossier dans un conteneur . Il s'agit en fait d'un dossier virtuel:

 enter image description here

2
Setyo N

Vous n'avez pas besoin de créer un sous-répertoire. Il suffit de créer un conteneur blob et d’utiliser un nom de fichier tel que la variable nom du fichier comme code ci-dessous:

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

Comme @Egon mentionné ci-dessus, il n'y a pas de réelle gestion de dossiers dans le stockage BLOB.

Vous pouvez obtenir certaines fonctionnalités d'un système de fichiers en utilisant "/" dans le nom du fichier, mais cela comporte de nombreuses limitations (par exemple, que se passe-t-il si vous devez renommer un "dossier"?).

En règle générale, je garderais mes fichiers aussi plat que possible dans un conteneur et laisser mon application gérer la structure que je souhaite exposer aux utilisateurs finaux (par exemple, gérer une structure de dossiers imbriquée dans ma base de données). , avoir un enregistrement pour chaque fichier, référençant le BLOB en utilisant nom de conteneur et nom de fichier).

1
Assaf S.

Voici comment je le fais dans CoffeeScript sur 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

Vous rencontrez un problème similaire en essayant Azure Sample first-serverless-app .
Voici les informations sur la résolution de ce problème en supprimant\devant $ web.

Remarque: Le conteneur $ web a été créé automatiquement lors de l'activation du site Web statique. Jamais vu $ conteneur racine nulle part.

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