62 votes

Renommer un Blob de stockage Azure

Est-il possible de renommer un Blob de stockage Azure en utilisant l'API de stockage Azure à partir d'un rôle Web ? La seule solution que j'ai pour le moment est de copier le blob vers un nouveau blob portant le bon nom et de supprimer l'ancien.

0 votes

Maintenant, oui en utilisant ADLS Gen 2 avec l'espace de nom hiérarchique - docs.microsoft.com/fr/us/azure/storage/data-lake-storage/

0voto

Pleymor Points 704

Il existe également un moyen sans copier votre blob pour le renommer, et sans exécuter de script : monter le stockage Azure Blob sur votre OS : https://docs.microsoft.com/bs-latn-ba/azure/storage/blobs/storage-how-to-mount-container-linux

Alors vous pouvez simplement utiliser mv et votre blob sera renommé instantanément.

0voto

Tom McDonough Points 875

L'utilisation d'Azure Storage Explorer est le moyen le plus simple de renommer manuellement un blob. Vous pouvez le télécharger ici https://azure.microsoft.com/en-us/features/storage-explorer/#overview

-1voto

klatzib Points 126

Si vous définissez la propriété ContentDisposition avec l'option

attachment;filename="yourfile.txt"

Le nom du téléchargement par http sera celui que vous voulez.

Je pense que Storage a été construit en partant du principe que les données seraient stockées de manière à ce que des identifiants uniques soient principalement utilisés comme noms de fichiers. L'émission de signatures d'accès partagé pour tous les téléchargements est un peu bizarre cependant, donc ce n'est pas idéal pour certaines personnes.

Mais je pense que l'abstraction du nom de fichier accessible à l'utilisateur est globalement une bonne pratique et encourage une architecture plus stable.

-2voto

rak Points 58

Cela a fonctionné pour moi dans un environnement réel de 100 000 utilisateurs dont les fichiers ne dépassent pas 100 mb. C'est une approche synchrone similaire à la réponse de @viggity. Mais la différence est qu'elle copie tout du côté d'Azure et que vous n'avez pas besoin de maintenir le flux de mémoire sur votre serveur pour la copie/le téléchargement vers le nouveau Blob.

 var account = new CloudStorageAccount(new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(StorageAccountName, StorageAccountKey), true);
 CloudBlobClient blobStorage = account.CreateCloudBlobClient();
 CloudBlobContainer container = blobStorage.GetContainerReference("myBlobContainer");

 string fileName = "OldFileName";  
 string newFileName = "NewFileName"; 

 CloudBlockBlob oldBlob = container.GetBlockBlobReference(fileName);
 CloudBlockBlob newBlob = container.GetBlockBlobReference(newFileName);
 using (var stream = new MemoryStream())
 {
      newBlob.StartCopyFromBlob(oldBlob);
      do { } while (!newBlob.Exists());
      oldBlob.Delete();
 }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X