Azure存储将blob移动到其他容器

Apr*_*982 19 c# vb.net storage azure

我正在寻找一种方法将Azure中的blob从一个容器移动到另一个容器.我找到的唯一解决方案是使用Azure存储数据移动库,但这似乎适用于不同的帐户.我想将同一帐户中的blob移动到另一个容器中.

Gau*_*tri 26

我没有使用,Azure Storage Data Movement Library但我很确定它也可以在同一个存储帐户中使用.

回到你的问题,由于MoveAzure存储本身不支持操作,你可以做的是通过调用Copy Blob后跟来实现Delete Blob.通常,Copy操作是异步的,但是当在同一存储帐户中复制blob时,它是同步操作,即即时复制.请参阅下面的示例代码:

    static void MoveBlobInSameStorageAccount()
    {
        var cred = new StorageCredentials(accountName, accountKey);
        var account = new CloudStorageAccount(cred, true);
        var client = account.CreateCloudBlobClient();
        var sourceContainer = client.GetContainerReference("source-container-name");
        var sourceBlob = sourceContainer.GetBlockBlobReference("blob-name");
        var destinationContainer = client.GetContainerReference("destination-container-name");
        var destinationBlob = destinationContainer.GetBlockBlobReference("blob-name");
        destinationBlob.StartCopy(sourceBlob);
        sourceBlob.Delete(DeleteSnapshotsOption.IncludeSnapshots);
    }
Run Code Online (Sandbox Code Playgroud)

但是,请记住,您仅将此代码用于在同一存储帐户中移动blob.要在存储帐户之间移动blob,您需要确保在删除源Blob之前完成复制操作.


Dar*_*elk 18

这对我有用(回答@Deumber更好的答案后编辑回复):

    public async Task<CloudBlockBlob> Move(CloudBlockBlob srcBlob, CloudBlobContainer destContainer)
    {
        CloudBlockBlob destBlob;

        if (srcBlob == null)
        {
            throw new Exception("Source blob cannot be null.");
        }

        if (!destContainer.Exists())
        {
            throw new Exception("Destination container does not exist.");
        }

        //Copy source blob to destination container
        string name = srcBlob.Uri.Segments.Last();
        destBlob = destContainer.GetBlockBlobReference(name);
        await destBlob.StartCopyAsync(srcBlob);
        //remove source blob after copy is done.
        srcBlob.Delete();
        return destBlob;
    }
Run Code Online (Sandbox Code Playgroud)

  • 未来读者请注意:由于上述评论已经编写并且不再适用,因此用户编辑了此答案. (3认同)
  • 如 [Gaurav 的回答](/sf/answers/2818661191/) 中所述,复制选项不能保证立即完成 - [“Blob 服务会尽最大努力复制 Blob”](https: //docs.microsoft.com/en-us/rest/api/storageservices/copy-blob#remarks)。 (2认同)

RJa*_*nes 18

此问题中接受的答案将文件移动到您的服务器内存,然后再次将文件上传到azure.

最好让工作变得天蓝色

CloudBlobClient blobClient = StorageAccount.CreateCloudBlobClient();
    CloudBlobContainer sourceContainer = blobClient.GetContainerReference(SourceContainer);
    CloudBlobContainer targetContainer = blobClient.GetContainerReference(TargetContainer);

    CloudBlockBlob sourceBlob = sourceContainer.GetBlockBlobReference(fileToMove);
    CloudBlockBlob targetBlob = targetContainer.GetBlockBlobReference(newFileName);
                    await targetBlob.StartCopyAsync(sourceBlob);
Run Code Online (Sandbox Code Playgroud)