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



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

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

但如果我给出的源路径是这样的:storageaccount/container/folder1/folder2/folder3/xyz.txt,那么它就可以将数据从源复制到目标。我们能否将整个文件夹3的数据复制到目的地?而不是循环浏览所有文件?

您提到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();
}

Update:关于复制操作的状态,有一个方法getCopyState,你可以得到状态的详细信息,希望这是你想要的。有关详细信息,请查看该方法。

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

最新更新