Nie używałem Azure Storage Data Movement Library
ale jestem pewien, że to będzie działać na tym samym koncie przechowywania, jak również.
Przechodząc do pytania, ponieważ operacja nie jest obsługiwana natywnie w usłudze Azure Storage, można ją wdrożyć, wywołując Copy Blob
, a następnie Delete Blob
. Zasadniczo operacja jest jednak asynchroniczna, gdy jednak obiekt blobowy jest kopiowany na tym samym koncie pamięci, jest to operacja synchroniczna, tj. Kopiowanie odbywa się natychmiastowo. Proszę zobaczyć przykładowy kod poniżej, która nie tylko to:
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);
}
Należy jednak pamiętać, że używasz tego kodu tylko dla ruchu plamy na tym samym koncie przechowywania. Aby przenieść obiekt blob na konto magazynu, przed usunięciem obiektu typu blob źródłowego upewnij się, że operacja kopiowania została zakończona.
Musisz zresetować pozycję 'MemoryStream' między pobieraniem i wysyłaniem, w przeciwnym razie otrzymasz pusty plik: ' memoryStream.Position = 0; ' –
Spowoduje to pobranie pliku ze sklepu BLOB, załadowanie go do pamięci, następnie prześlij go z powrotem do sklepu blob. Znacznie lepiej jest pozwolić usłudze pamięci masowej na kopiowanie, jak opisano w poniższych odpowiedziach. – dana
Uwaga dla przyszłych czytelników: użytkownik edytował tę odpowiedź, ponieważ powyższe komentarze zostały napisane i nie są już stosowane. –