Saltar al contenido

Azure Storage mueve el blob a otro contenedor

Siéntete en la libertad de divulgar nuestro sitio y códigos en tus redes sociales, necesitamos tu ayuda para ampliar esta comunidad.

Solución:

no he usado Azure Storage Data Movement Library pero estoy bastante seguro de que también funcionará en la misma cuenta de almacenamiento.

Volviendo a tu pregunta, ya que Move la operación no es compatible de forma nativa con Azure Storage, lo que puede hacer es implementar esto invocando Copy Blob seguido por Delete Blob. En general Copy la operación es asíncrona; sin embargo, cuando se copia un blob en la misma cuenta de almacenamiento, se trata de una operación síncrona, es decir, la copia ocurre instantáneamente. Consulte el código de muestra a continuación que hace exactamente esto:

    static void MoveBlobInSameStorageAccount()
    
        var cred = new StorageCredentials(accountName, accountKey);
        var account = new CloudStorageAccount(cred, true);
        var client = account.CreateCloudBlobClient();
        var sourceContainer = client.GetContainerReference("source-container-name");
        var sourceBlob = sourceContainer.GetBlockBlobReference("blob-name");
        var destinationContainer = client.GetContainerReference("destination-container-name");
        var destinationBlob = destinationContainer.GetBlockBlobReference("blob-name");
        destinationBlob.StartCopy(sourceBlob);
        sourceBlob.Delete(DeleteSnapshotsOption.IncludeSnapshots);
    

Sin embargo, tenga en cuenta que utiliza este código solo para mover blobs en la misma cuenta de almacenamiento. Para mover blobs entre cuentas de almacenamiento, debe asegurarse de que la operación de copia esté completa antes de eliminar el blob de origen.

Esto es lo que funcionó para mí (respuesta editada después de que se publicó una mejor respuesta de @Deumber):

    public async Task Move(CloudBlockBlob srcBlob, CloudBlobContainer destContainer)
    
        CloudBlockBlob destBlob;

        if (srcBlob == null)
        
            throw new Exception("Source blob cannot be null.");
        

        if (!destContainer.Exists())
        
            throw new Exception("Destination container does not exist.");
        

        //Copy source blob to destination container
        string name = srcBlob.Uri.Segments.Last();
        destBlob = destContainer.GetBlockBlobReference(name);
        await destBlob.StartCopyAsync(srcBlob);
        //remove source blob after copy is done.
        srcBlob.Delete();
        return destBlob;
    

La respuesta aceptada en esta pregunta moverá el archivo a la memoria de su servidor y luego lo cargará desde su memoria a Azure nuevamente.

Una mejor práctica podría ser dejar todo el trabajo en Azure

CloudBlobClient blobClient = StorageAccount.CreateCloudBlobClient();
    CloudBlobContainer sourceContainer = blobClient.GetContainerReference(SourceContainer);
    CloudBlobContainer targetContainer = blobClient.GetContainerReference(TargetContainer);
        
    CloudBlockBlob sourceBlob = sourceContainer.GetBlockBlobReference(fileToMove);
    CloudBlockBlob targetBlob = targetContainer.GetBlockBlobReference(newFileName);
                    await targetBlob.StartCopyAsync(sourceBlob);

Si estás de acuerdo, eres capaz de dejar un enunciado acerca de qué te ha gustado de este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *