从Append Blob复制到BlockBlob

时间:2019-03-27 13:24:16

标签: azure azure-storage-blobs

我想将我的Blob类型从“附加Blob”更改为“ BlockBlob”。 根据{{​​3}} 这是不可能的。因此,我想复制

            var container = blobClient.GetContainerReference("videos");
            var sourceBlob = container.GetAppendBlobReference(blobName);
            var newBlobName = blobName + "FinalBlob";
            var targetBlob = container.GetBlobReference(newBlobName);

            targetBlob.StartCopyAsync(sourceBlob.Uri).Wait();

生成的blob是一个Appendblob,而不是BlockBlob

2 个答案:

答案 0 :(得分:1)

无法通过复制操作更改Blob类型。目标blob的类型将始终与源blob的类型相同。

我想到的两个可能的解决方案:

  • 下载并上传:如我的other answer所述,您可以将append Blob下载到本地计算机,然后再次将其作为Block Blob上传。
  • 复制到文件共享并复制回:其他解决方案可能是先将blob复制到文件共享。复制操作完成后,您可以将该文件复制回Blob存储。在这种情况下,复制的Blob的Blob类型将始终为Block Blob

答案 1 :(得分:0)

复制命令可以正常工作:


    foreach (var blob in container.ListBlobs(input.OutputPrefix + "/", true).OfType<CloudAppendBlob>())
    {
        var test = container.GetBlockBlobReference(blob.Name.Replace(".csv", "out.csv"));
        await test.StartCopyAsync(new Uri(blob.Uri+blob.GetSharedAccessSignature(new SharedAccessBlobPolicy { Permissions= SharedAccessBlobPermissions.Read, SharedAccessExpiryTime= DateTimeOffset.UtcNow.AddHours(2) })));
    }

以上代码已被证明有效。