![](/img/trans.png)
[英]How to rename file/directory (not Blob file) in Azure Storage (not Blob storage)?
[英]Can't rename blob file in Azure Storage
我正在尝试通过.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();
OP中的代码几乎没有问题,只是调用了异步复制方法。 新API中最简单的代码应为:
var oldBlob = cloudBlobClient.GetBlobReferenceFromServer(oldBlobUri);
var newBlob = container.GetBlobReference("newblobname");
newBlog.CopyFromBlob(oldBlob);
oldBlob.Delete();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.