我有一个包含我的用户的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被任何用户更新,那么它会对实时网站或复制操作产生影响吗?
答案 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。