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

azure azure-storage-blobs

4037 观看

3回复

2825 作者的声誉

我试图通过.net API重命名bloure在azure存储中,并且我无法在一天后重命名blob文件:(

我是这样做的,通过创建新的blob和旧的blob。

var newBlob = blobContainer.GetBlobReferenceFromServer(filename);

newBlob.StartCopyFromBlob(blob.Uri);

blob.Delete();

服务器上没有新的blob,所以我得到了http 404 Not Found异常。

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

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

目前我正在使用2.0 API。我在哪里犯了错误?

作者: Freshblood 的来源 发布者: 2013 年 4 月 20 日

回应 (3)


6

70717 作者的声誉

决定

我看到你正在使用GetBlobReferenceFromServer方法来创建一个新的blob对象的实例。要使此功能起作用,必须存在blob,而在尝试重命名blob时则不会出现这种情况。

你可以做的是调用GetBlobReferenceFromServer旧的blob,得到它的类型,然后创建一个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();
作者: Gaurav Mantri 发布者: 20.04.2013 03:06

0

516 作者的声誉

除了调用异步复制方法之外,OP中的代码几乎没有问题。新API中最简单的代码应该是:

var oldBlob = cloudBlobClient.GetBlobReferenceFromServer(oldBlobUri);
var newBlob = container.GetBlobReference("newblobname");
newBlog.CopyFromBlob(oldBlob);
oldBlob.Delete();
作者: eMazeika 发布者: 04.10.2013 12:48

0

19 作者的声誉

不可以。您无法在Windows Azure中重命名blob容器。

用于将blob从旧存储复制到新存储的代码

AzCopy /来源:https ://oldstorage.blob.core.windows.net/oldstorage / Dest:https://newstorage.blob.core.windows.net/newstorage / SourceKey:sourcekey / DestKey:destkey / S / XO

作者: Fernando Magno 发布者: 14.11.2018 04:37
32x32