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.