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


93

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

par exemple,

dans mon conteneur d' objets 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

Réponses:


134

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


3
comment filtrer ou obtenir tous ces fichiers à partir de "dossier"?
afr0

1
Cela ne fonctionne pas pour moi, dit les conteneurs ne peuvent pas utiliser autre chose que des minuscules, des tirets, des chiffres. Idem pour les noms de fichiers
Green_qaue

@Green_qaue vous devez utiliser uniquement des lettres minuscules et des chiffres pour nommer votre conteneur / répertoires et c'est pourquoi vous avez des erreurs.
Sapan Ghafuri

1
il crée plusieurs répertoires avec le même dossier, je veux dire à chaque fois que je télécharge un fichier, il crée à nouveau un répertoire appelé "dossier", y a-t-il une méthode pour vérifier si le dossier existe afin qu'il ne devrait pas le créer?
amal50

@SapanGhafuri ce n'est pas vrai, vous pouvez créer des répertoires contenant des caractères
majuscules

36

Il n'y a en fait qu'une seule couche de conteneurs. Vous pouvez créer virtuellement un "système de fichiers" comme le stockage en couches, mais en réalité tout sera dans 1 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'objets blob contenant un '/' afin que vous puissiez faire ce que vous voulez avec la façon dont vous stockez. De plus, le grand avantage est que vous pouvez rechercher un objet blob à un niveau virtuel, en donnant une chaîne partielle, jusqu'à un «/».

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


Pouvez-vous partager un exemple C #? blob.Le nom est une propriété en lecture seule, nous ne sommes donc pas en mesure de créer un blob.Name avec "/"
ABB

34

Il y a un commentaire de @ afr0 demandant comment filtrer sur les dossiers.

Il existe deux façons d'utiliser le GetDirectoryReferenceou en boucle sur un objet 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-with-Directori


1
Cela devrait être la réponse à la date d'aujourd'hui. +1
MickyD

1
C'est une bonne information mais est-ce que ça répond «Comment créer un sous-répertoire dans un conteneur d'objets blob»?
codah le

19

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

entrez la description de l'image ici



4

Vous n'avez pas besoin de créer un sous-répertoire. Créez simplement un conteneur d'objets blob et utilisez le nom de fichier comme le nom de fichier variable 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

2

Comme @Egon l'a mentionné ci-dessus, il n'y a pas de véritable gestion de dossier dans le stockage BLOB.

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

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


1

Vous avez un problème similaire en essayant Azure Sample first-serverless-app .
Voici les informations sur la façon dont j'ai résolu en supprimant \ devant $ web.

Remarque: $ web container a été créé automatiquement lors de l'activation du site Web statique. Jamais vu de conteneur $ root 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

-1

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

3
La question est étiquetée commeC#
Rafael Herscovici

@Dementic D'où ma mention de CoffeeScript, qui est juste du JavaScript sans cruauté. Ne devrait pas être trop difficile à porter en C #, surtout par rapport à la réponse acceptée qui n'est même pas dans un langage de programmation.
Cees Timmerman
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.