是否可以将容器的整个 blob(具有文件)复制到 java 中的另一个订阅容器 blob

Posted

技术标签:

【中文标题】是否可以将容器的整个 blob(具有文件)复制到 java 中的另一个订阅容器 blob【英文标题】:Is it possible to copy whole blob of a container (having files)to another subscription container blob in java 【发布时间】:2020-07-25 08:37:57 【问题描述】:

我想从 blob 复制数据,例如 storageaccount/container/folder1/folder2/folder3 。现在我想将 folder3 数据复制到另一个订阅容器 blob。

我正在使用 java 和 azure sdk,startcopy 使用 SAS 将源复制到目标。但每次它说 blob 不存在。

但如果我给出这样的源路径:storageaccount/container/folder1/folder2/folder3/xyz.txt 那么它能够将数据从源复制到目标。 我们不能将整个文件夹 3 数据复制到目的地吗?而不是遍历所有文件?

【问题讨论】:

请编辑您的问题并包含您编写的代码。 关于这个问题,可以尝试使用azcopy来实现。更多详情请参考docs.microsoft.com/en-us/azure/storage/common/… 【参考方案1】:

您提到startcopy 方法,假设您使用的是v8 sdk。您说使用storageaccount/container/folder1/folder2/folder3时会说blob不存在,因为您只需提供一个目录,而startcopy需要CloudBlockBlob对象。

所以正确的方法应该是列出目录下的blob,然后循环blob并复制blob。下面是我的测试代码,为了测试我只是将一个目录复制到另一个容器中。

        CloudStorageAccount storageAccount = CloudStorageAccount.parse(connectStr);
        CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
        try 
            CloudBlobContainer container = blobClient.getContainerReference("test");
            Iterable<ListBlobItem> blobs=container.listBlobs("testfolder/");
            CloudBlobContainer destcontainer=blobClient.getContainerReference("testcontainer");

            for(ListBlobItem blob:blobs)
                CloudBlockBlob srcblob=new CloudBlockBlob(blob.getUri());
                CloudBlockBlob destblob= destcontainer.getBlockBlobReference(srcblob.getName());
                destblob.startCopy(srcblob);

            

         catch (StorageException e) 
            e.printStackTrace();
        

更新:关于复制动作的状态,有一个方法getCopyState,你可以得到状态细节,希望这是你想要的。更多细节检查方法。

CopyState st=destblob.getCopyState();
System.out.println(st.getStatus());

【讨论】:

谢谢。我们需要添加 SAS 吗?另外,如何跟踪副本的状态? 如果您想这样做,您可以添加 sas,关于复制状态,请查看我更新的答案。 @sar,关于这个问题的任何处理?如果这对你有帮助,你可以接受它作为答案,关注这个link。

以上是关于是否可以将容器的整个 blob(具有文件)复制到 java 中的另一个订阅容器 blob的主要内容,如果未能解决你的问题,请参考以下文章

使用python将文件从blob容器复制到另一个容器

Azure Blob - ASP.NET,将 Blob 复制到同一集合中

将 blob 从私有 blob 容器复制到 Azure 中的公共 blob 容器

将本地文件复制到 Azure Blob - 长文件名

将整个目录从容器复制到主机

将文件从远程桌面(RDP)复制到Azure blob存储中