繁体   English   中英

无法在Azure存储中重命名Blob文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM