Obtenir plusieurs fichiers à partir du stockage Blob avec les liaisons de fonctions Azure

2020-07-31 c# azure azure-functions

Existe-t-il un moyen d'obtenir plusieurs fichiers à partir de liaisons de fonction Azure sans connaître à l'avance les noms de fichier ou de dossier? Pour une fonction différente, j'ai ceci:

 public async Task<Activity> GetActivity([ActivityTrigger] Activity activity,
     [Blob("activities/migration/{activity.Id}", FileAccess.Read)] Stream activityBlob,
     ILogger log)
 {

 }

Et cela obtiendra le fichier du dossier de migration en fonction de l'ID dans la classe d'activité.

Mais pour une autre fonction, il y aura une grande quantité de fichiers certains dans des dossiers, les identifiants ne seront pas connus à l'avance. Cela ne peut donc pas être passé en tant que paramètre pour accéder à l'objet blob.

Ma question est la suivante: y a-t-il un «obtenir tout» ou «obtenir récursivement» pour ces liaisons? Quelque chose qui obtiendra tous les fichiers et dossiers dans un conteneur?

Si ce n'est pas par des liaisons, peut-être par le code?

Answers

Ce n'est pas possible via une liaison d'entrée blob, mais vous pouvez utiliser une liaison d'entrée dynamique pour obtenir tous les fichiers d'un conteneur.Veuillez vous référer au code ci-dessous: -

public async Task<Activity> Run(
            [ActivityTrigger] Activity activity,
            IBinder binder,
            ILogger log)
        {
            var blobs= await binder.BindAsync<IEnumerable<CloudBlockBlob>>(new BlobAttribute(blobPath: $"activities/migration")
            {
                Connection = "AzureWebJobsStorage"
            });
            
        }

Cela vous donnera une liste de tous les objets blob dans un conteneur, puis vous pourrez probablement poursuivre vos opérations.Une autre façon serait d'utiliser la méthode ListBlobsSegmentedAsync sur une référence de conteneur dans le code.

Related