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

veda
la source

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.

user94559
la source
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».

Egon
la source
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

AntonB
la source
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

Pritam
la source
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
Khabir
la source
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).

Assaf S.
la source
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
Nara
la source
-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
Cees Timmerman
la source
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