gpt4 book ai didi

Azure.Storage.Blobs.BlobServiceClient CopyFromUri() 在返回最新的 ETag 之前似乎没有完成复制

转载 作者:行者123 更新时间:2023-12-02 06:13:29 33 4
gpt4 key购买 nike

我正在尝试使用 StartCopyFromUri 或 StartCopyFromUriAsync 将 blob 从一个存储帐户复制到另一个存储帐户。即使 status.HasCompleted 当我尝试通过

获取 ETag 时
1. var etag = await _siteStorageClient.GetBlobETag(containerPath, asset.BlobName);
//this is the response from WaitForCompletionAsync
2. var etag = complete.GetRawResponse().Headers.Where(x => x.Name == "ETag").FirstOrDefault().Value;

我尝试了这两种方法,但都返回一个 Etag,该 Etag 与我通过 Azure 门户登录时 Blob 属性中显示的内容不匹配。当执行 Etag 检查时,几乎就像文件没有完成复制(或竞争条件)一样。我在 github 上找不到该 SDK 的任何使用示例。

有什么想法可能会出错吗?

这是一个类似的问题,但使用的是较旧的 SDK。 How to copy a blob from one container to another container using Azure Blob storage SDK

//Storage class
public async Task<CopyFromUriOperation> CopyFile(string containerName, string blobName, Uri sourceUri)
{
var container = _blobServiceClient.GetBlobContainerClient(containerName);
var blockBlobClient = container.GetBlockBlobClient(blobName);

//Made this the synchronous version try and block
//this is the target client
var status = await blockBlobClient.StartCopyFromUriAsync(sourceUri);

while(!status.HasCompleted)
{
//Per Documentation this calls UpdateStatusAsync() periodically
//until status.HasCompleted is true
await status.WaitForCompletionAsync();
}
return status;
}


//Calling Code

var status = await _siteStorageClient.CopyFile(container,BlobName, sasUri);
var etag = await _siteStorageClient.GetBlobETag(container, BlobName);

最佳答案

经过几次尝试和故障排除后,我能够使其正常工作。它只会发生在 Azure 环境中,而不会发生在本地运行 Web 应用程序时。

最初,status.WaitForCompletionAsync() 位于循环内,我开始收到套接字错误。我相信它被调用太多次并导致端口耗尽(此时只是猜测)。

但这就是现在正在发挥作用的方法。

public async Task<CopyFromUriOperation> CopyFile(string containerName, string blobName,Uri sourceUri)
{
var container = _blobServiceClient.GetBlobContainerClient(containerName);
var blockBlobClient = container.GetBlockBlobClient(blobName);

var status = await blockBlobClient.StartCopyFromUriAsync(sourceUri);

await status.WaitForCompletionAsync();

while(status.HasCompleted == false)
{
await Task.Delay(100);
}

return status;
}

关于Azure.Storage.Blobs.BlobServiceClient CopyFromUri() 在返回最新的 ETag 之前似乎没有完成复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65860383/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com