gpt4 book ai didi

azure - 无法重命名 Azure 存储中的 blob 文件

转载 作者:行者123 更新时间:2023-12-04 02:40:11 30 4
gpt4 key购买 nike

我正在尝试通过 .net API 重命名 azure 存储中的 blob,但一天后我无法重命名 blob 文件:(

这是我的做法,通过创建新的 blob 并从旧的 blob 进行复制。

var newBlob = blobContainer.GetBlobReferenceFromServer(filename);

newBlob.StartCopyFromBlob(blob.Uri);

blob.Delete();

服务器上没有新的 blob,因此我收到 http 404 Not Found 异常。

这是我找到的工作示例,但它适用于旧的 .net Storage api。

CloudBlob blob = container.GetBlobReference(sourceBlobName);
CloudBlob newBlob = container.GetBlobReference(destBlobName);
newBlob.UploadByteArray(new byte[] { });
newBlob.CopyFromBlob(blob);
blob.Delete();

目前我使用的是2.0 API。我哪里出错了?

最佳答案

我发现您正在使用 GetBlobReferenceFromServer 方法来创建新 blob 对象的实例。为了使此函数正常工作,该 blob 必须存在,但当您尝试重命名该 blob 时则不会出现这种情况。

您可以做的是在旧 blob 上调用 GetBlobReferenceFromServer,获取其类型,然后创建 BlockBlob 或 PageBlob 的实例并对其执行复制操作。所以你的代码会是这样的:

    CloudBlobContainer blobContainer = storageAccount.CreateCloudBlobClient().GetContainerReference("container");
var blob = blobContainer.GetBlobReferenceFromServer("oldblobname");
ICloudBlob newBlob = null;
if (blob is CloudBlockBlob)
{
newBlob = blobContainer.GetBlockBlobReference("newblobname");
}
else
{
newBlob = blobContainer.GetPageBlobReference("newblobname");
}
//Initiate blob copy
newBlob.StartCopyFromBlob(blob.Uri);
//Now wait in the loop for the copy operation to finish
while (true)
{
newBlob.FetchAttributes();
if (newBlob.CopyState.Status != CopyStatus.Pending)
{
break;
}
//Sleep for a second may be
System.Threading.Thread.Sleep(1000);
}
blob.Delete();

关于azure - 无法重命名 Azure 存储中的 blob 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16121503/

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