在Blob中将Blob从一个存储帐户复制到另一个存储帐户

时间:2017-02-06 09:53:04

标签: c# azure azure-storage

我有一个包含我的用户的blob'的CV。

我的网站已上线。现在我想从一个blob复制到另一个具有不同存储帐户的blob。

这是我复制blob的代码

        CloudStorageAccount sourceStorageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("sourceStorageConnectionString"));
        CloudStorageAccount targetStorageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("targetStorageConnectionString"));

        CloudBlobClient sourceCloudBlobClient = sourceStorageAccount.CreateCloudBlobClient();
        CloudBlobClient targetCloudBlobClient = targetStorageAccount.CreateCloudBlobClient();

        CloudBlobContainer sourceContainer = sourceCloudBlobClient.GetContainerReference(CloudConfigurationManager.GetSetting("sourceContainer"));
        CloudBlobContainer targetContainer = targetCloudBlobClient.GetContainerReference(CloudConfigurationManager.GetSetting("targetContainer"));
        targetContainer.CreateIfNotExists();

        // Copy each blob
        foreach (IListBlobItem blob in sourceContainer.ListBlobs(useFlatBlobListing: true))
        {

            Uri thisBlobUri = blob.Uri;

            var blobName = Path.GetFileName(thisBlobUri.ToString());
            Console.WriteLine("Copying blob: " + blobName);

            CloudBlockBlob sourceBlob = sourceContainer.GetBlockBlobReference(blobName);
            CloudBlockBlob targetBlob = targetContainer.GetBlockBlobReference(blobName);

            Task task = TransferManager.CopyAsync(sourceBlob, targetBlob, true /* isServiceCopy */);

        }

但我担心的是:如果此复制操作正在运行且其中一个Cv被任何用户更新,那么它会对实时网站或复制操作产生影响吗?

1 个答案:

答案 0 :(得分:3)

您正在制作异步服务端副本( [TestMethod()] public void LatinizeAndConvertToASCIITest() { string europeanStr = "Bonjour ça va? C'est l'été! Ich möchte ä Ä á à â ê é è ë Ë É ï Ï î í ì ó ò ô ö Ö Ü ü ù ú û Û ý Ý ç Ç ñ Ñ"; string expected = "Bonjourcava?C'estl'ete!IchmoechteaeAeaaaeeeeEEiIiiiooooeOeUeueuuuUyYcCnN"; string actual = europeanStr.LatinizeAndConvertToASCII(); Assert.AreEqual(expected, actual); } )。如果源在复制期间发生更改,则其ETag会更改,从而使副本无效。然后,您需要重新启动失败的副本。

注意:如果在复制之前拍摄快照,则可以安全地复制快照,因为它知道其内容无法更改(即使基本blob发生更改)。您需要处理清理快照,但这是解决源blob上的并发写入问题的一种方法(或者您可以简单地重试该副本,如上所述)。

我发布了类似问题的答案,here