web-dev-qa-db-fra.com

Comment supprimer des fichiers du conteneur d'objets blob?

private readonly CloudBlobContainer _blobContainer;

public void Remove()
{
    if (_blobContainer.Exists())
    {
       _blobContainer.Delete();
    }
}

Comment supprimer non pas un conteneur entier mais quelques List<string> disks que dans le conteneur?

14
user6011767

Voici le code que j'utilise:

private CloudBlobContainer blobContainer;

public void DeleteFile(string uniqueFileIdentifier)
{
    this.AssertBlobContainer();

    var blob = this.blobContainer.GetBlockBlobReference(fileName);
    blob.DeleteIfExists();
}

private void AssertBlobContainer()
{
    // only do once
    if (this.blobContainer == null)
    {
        lock (this.blobContainerLockObj)
        {
            if (this.blobContainer == null)
            {
                var client = this.cloudStorageAccount.CreateCloudBlobClient();

                this.blobContainer = client.GetContainerReference(this.containerName.ToLowerInvariant());

                if (!this.blobContainer.Exists())
                {
                    throw new CustomRuntimeException("Container {0} does not exist in Azure account", containerName);
                }
            }
        }
    }

    if (this.blobContainer == null) throw new NullReferenceException("Blob Empty");
}

Vous pouvez ignorer le code de verrouillage si vous savez qu'il ne sera pas accessible simultanément

De toute évidence, vous avez trié les choses blobContainer, donc tout ce dont vous avez besoin est cette méthode DeleteFile sans la fonction this.AssertBlobContainer().

25
Callum Linington
List<string> FileNameList = new List<string>();
FileNameList = fileName.Split(',').Where(t => t.ToString().Trim() != "").ToList();
CloudBlobClient client;
CloudBlobContainer container;
CloudBlockBlob blob;
string accessKey;
string accountName;
string connectionString;
accessKey = Environment.GetEnvironmentVariable("StorageAccountaccessKey");
accountName = Environment.GetEnvironmentVariable("StorageAccountName");
connectionString = Environment.GetEnvironmentVariable("StorageAccountConnectionString");
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
client = storageAccount.CreateCloudBlobClient();
string containerName = tenantId;
container = client.GetContainerReference(containerName);

foreach(var file in FileNameList)
{
   blob = container.GetBlockBlobReference(file);
   blob.DeleteIfExists();
}
1
Ami

Nous pouvons utiliser le cloudBlobContainer.ListBlobsSegmentedAsync pour répertorier les objets blob, puis les convertir en ICloudBlob afin de pouvoir effectuer le DeleteIfExistsAsync. Vous trouverez ci-dessous l'exemple de fonction de travail. J'espère que cela aide.

public async Task < bool > PerformTasks() {
    try {
        if (CloudStorageAccount.TryParse(StorageConnectionString, out CloudStorageAccount cloudStorageAccount)) {
            var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
            var cloudBlobContainer = cloudBlobClient.GetContainerReference(_blobContainerName);
            if (await cloudBlobContainer.ExistsAsync()) {
                BlobContinuationToken blobContinuationToken = null;
                var blobList = await cloudBlobContainer.ListBlobsSegmentedAsync(blobContinuationToken);
                var cloudBlobList = blobList.Results.Select(blb = >blb as ICloudBlob);
                foreach(var item in cloudBlobList) {
                    await item.DeleteIfExistsAsync();
                }
                return true;
            }
            else {
                _logger.LogError(ErrorMessages.NoBlobContainerAvailable);
            }
        }
        else {
            _logger.LogError(ErrorMessages.NoStorageConnectionStringAvailable);
        }
    }
    catch(Exception ex) {
        _logger.LogError(ex.Message);
    }
    return false;
}
0
Sibeesh Venu