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

标签 azure azure-blob-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();

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

相关文章:

Azure 服务结构与 Ocelot API 网关 404 错误

c# - 扩展基础移动 Azure 示例(.net 后端)

azure - 寻找替代解决方案来处理从 Azure Blob 到 Azure SQL DB 的数万个 JSON

c# - Azure 存储 FindBlobsByTags 排序和获取 n 个结果的可能性

c# - 在 Azure Blob 存储上为 IE9 强制下载文件

azure - 如何构建代表 Azure 数据湖(第 2 代)的 Docker 镜像?

java - 将 jar 可执行文件上传到 Azure 并运行

azure - 适用于 Azure Blob 的 JCloud

azure - Azure 存储可以从通用存储更改为 Blob 存储吗

azure - 如何为 Azure Premium Verizon CDN、httpTohttps 和 SPA 重写规则编写规则引擎?