using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.StorageClient; namespace CopyAmazonObjectToBlobStorage { class Program { private static string azureStorageAccountName = “"; private static string azureStorageAccountKey = ""; private static string azureBlobContainerName = ""; private static string amazonObjectUrl = ""; private static string azureBlobName = ""; static void Main(string[] args) { CloudStorageAccount csa = new CloudStorageAccount(new StorageCredentialsAccountAndKey(azureStorageAccountName, azureStorageAccountKey), true); CloudBlobClient blobClient = csa.CreateCloudBlobClient(); var blobContainer = blobClient.GetContainerReference(azureBlobContainerName); Console.WriteLine("Trying to create the blob container...."); blobContainer.CreateIfNotExist(); Console.WriteLine("Blob container created...."); var blockBlob = blobContainer.GetBlockBlobReference(azureBlobName); Console.WriteLine("Created a reference for block blob in Windows Azure...."); Console.WriteLine("Blob Uri: " + blockBlob.Uri.AbsoluteUri); Console.WriteLine("Now trying to initiate copy...."); blockBlob.StartCopyFromBlob(new Uri(amazonObjectUrl), null, null, null); Console.WriteLine("Copy started...."); Console.WriteLine("Now tracking blob's copy progress...."); bool continueLoop = true; while (continueLoop) { Console.WriteLine(""); Console.WriteLine("Fetching lists of blobs in Azure blob container...."); var blobsList = blobContainer.ListBlobs(true, BlobListingDetails.Copy); foreach (var blob in blobsList) { var tempBlockBlob = (CloudBlob) blob; var destBlob = blob as CloudBlob; if (tempBlockBlob.Name == azureBlobName) { var copyStatus = tempBlockBlob.CopyState; if (copyStatus != null) { Console.WriteLine("Status of blob copy...." + copyStatus.Status); var percentComplete = copyStatus.BytesCopied / copyStatus.TotalBytes; Console.WriteLine("Total bytes to copy...." + copyStatus.TotalBytes); Console.WriteLine("Total bytes copied...." + copyStatus.BytesCopied); if (copyStatus.Status != CopyStatus.Pending) { continueLoop = false; } } } } Console.WriteLine(""); Console.WriteLine("=============================================="); System.Threading.Thread.Sleep(1000); } Console.WriteLine("Process completed...."); Console.WriteLine("Press any key to terminate the program...."); Console.ReadLine(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Amazon.S3; using Amazon.S3.Model; using Amazon.S3.Transfer; using Amazon.S3.Util; using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.StorageClient; using System.Globalization; namespace CopyAmazonBucketToBlobStorage { class Program { private static string azureStorageAccountName = “”; private static string azureStorageAccountKey = “”; private static string azureBlobContainerName = “”; private static string amazonAccessKey = “”; private static string amazonSecretKey = “”; private static string amazonBucketName = “”; private static string objectUrlFormat = “https://{0}.s3.amazonaws.com/{1}”; private static Dictionary<string, CopyBlobProgress> CopyBlobProgress; static void Main(string[] args) { // Windows Azure CloudStorageAccount azureCloudStorageAccount = new CloudStorageAccount(new StorageCredentialsAccountAndKey(azureStorageAccountName, azureStorageAccountKey), true); // , . var blobContainer = azureCloudStorageAccount.CreateCloudBlobClient().GetContainerReference(azureBlobContainerName); // , . Console.WriteLine(«Trying to create the blob container....»); blobContainer.CreateIfNotExist(); Console.WriteLine(«Blob container created....»); // Amazon AmazonS3Client amazonClient = new AmazonS3Client(amazonAccessKey, amazonSecretKey); // CopyBlobProgress = new Dictionary<string, CopyBlobProgress>(); string continuationToken = null; bool continueListObjects = true; // ListObjects 1000 , // , . while (continueListObjects) { ListObjectsRequest requestToListObjects = new ListObjectsRequest() { BucketName = amazonBucketName, Marker = continuationToken, MaxKeys = 100, }; Console.WriteLine(«Trying to list objects from S3 Bucket....»); // Amazon S3 var listObjectsResponse = amazonClient.ListObjects(requestToListObjects); // var objectsFetchedSoFar = listObjectsResponse.S3Objects; Console.WriteLine(«Object listing complete. Now starting the copy process....»); //, . , continuation token. continuationToken = listObjectsResponse.NextMarker; foreach (var s3Object in objectsFetchedSoFar) { string objectKey = s3Object.Key; //ListObjects , , S3 Object Key. /, . if (!objectKey.EndsWith(«/»)) { // URL string urlToCopy = string.Format(CultureInfo.InvariantCulture, objectUrlFormat, amazonBucketName, objectKey); // CloudBlockBlob CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(objectKey); var blockBlobUrl = blockBlob.Uri.AbsoluteUri; if (!CopyBlobProgress.ContainsKey(blockBlobUrl)) { CopyBlobProgress.Add(blockBlobUrl, new CopyBlobProgress() { Status = CopyStatus.NotStarted, }); // . try/catch // Amazon S3 . try { Console.WriteLine(string.Format(«Trying to copy \»{0}\» to \»{1}\»«, urlToCopy, blockBlobUrl)); blockBlob.StartCopyFromBlob(new Uri(urlToCopy)); CopyBlobProgress[blockBlobUrl].Status = CopyStatus.Started; } catch (Exception exception) { CopyBlobProgress[blockBlobUrl].Status = CopyStatus.Failed; CopyBlobProgress[blockBlobUrl].Error = exception; } } } } Console.WriteLine(««); Console.WriteLine(«==========================================================«); Console.WriteLine(««); Console.WriteLine(«Checking the status of copy process....»); // bool checkForBlobCopyStatus = true; while (checkForBlobCopyStatus) { // var blobsList = blobContainer.ListBlobs(true, BlobListingDetails.Copy); foreach (var blob in blobsList) { var tempBlockBlob = blob as CloudBlob; var copyStatus = tempBlockBlob.CopyState; if (CopyBlobProgress.ContainsKey(tempBlockBlob.Uri.AbsoluteUri)) { var copyBlobProgress = CopyBlobProgress[tempBlockBlob.Uri.AbsoluteUri]; if (copyStatus != null) { Console.WriteLine(string.Format(«Status of \»{0}\» blob copy....», tempBlockBlob.Uri.AbsoluteUri, copyStatus.Status)); switch (copyStatus.Status) { case Microsoft.WindowsAzure.StorageClient.CopyStatus.Aborted: if (copyBlobProgress != null) { copyBlobProgress.Status = CopyStatus.Aborted; } break; case Microsoft.WindowsAzure.StorageClient.CopyStatus.Failed: if (copyBlobProgress != null) { copyBlobProgress.Status = CopyStatus.Failed; } break; case Microsoft.WindowsAzure.StorageClient.CopyStatus.Invalid: if (copyBlobProgress != null) { copyBlobProgress.Status = CopyStatus.Invalid; } break; case Microsoft.WindowsAzure.StorageClient.CopyStatus.Pending: if (copyBlobProgress != null) { copyBlobProgress.Status = CopyStatus.Pending; } break; case Microsoft.WindowsAzure.StorageClient.CopyStatus.Success: if (copyBlobProgress != null) { copyBlobProgress.Status = CopyStatus.Success; } break; } } } } var pendingBlob = CopyBlobProgress.FirstOrDefault(c => c.Value.Status == CopyStatus.Pending); if (string.IsNullOrWhiteSpace(pendingBlob.Key)) { checkForBlobCopyStatus = false; } else { System.Threading.Thread.Sleep(1000); } } if (string.IsNullOrWhiteSpace(continuationToken)) { continueListObjects = false; } Console.WriteLine(««); Console.WriteLine(«==========================================================«); Console.WriteLine(««); } Console.WriteLine(«Process completed....»); Console.WriteLine(«Press any key to terminate the program....»); Console.ReadLine(); } } public class CopyBlobProgress { public CopyStatus Status { get; set; } public Exception Error { get; set; } } public enum CopyStatus { NotStarted, Started, Aborted, Failed, Invalid, Pending, Success } }
Source: https://habr.com/ru/post/146469/
All Articles