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.
Réponses
Trop de publicités?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.
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
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.
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();
}
- Réponses précédentes
- Plus de réponses
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/