我正在尝试通过 .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/