Вы упомянули метод startcopy
, предположим, вы используете v8 sdk. Когда вы используете storageaccount/container/folder1/folder2/folder3
, вы говорите, что blob не существует, потому что вы просто предоставляете каталог, а startcopy нужен объект CloudBlockBlob
.
Так что правильный путь должен быть перечислите BLOB-объекты в каталоге, затем l oop 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());