问题描述
我正在使用MultipartObjectAssembler将数据从数据库上传到OCI对象存储。 使用分段上传时,是否有办法知道失败的原因?
当我尝试提交汇编程序时,我收到IllegalStateException,消息为“一个或多个部件尚未成功完成上传”。 我想知道为什么任何部分都失败了?我找不到从SDK获取此信息的方法。
mounted()
解决方法
您是否没有使用UploadManager
是有原因的吗?它应该为您做所有事情,包括添加零件和提交。这是一个端到端的示例:https://github.com/oracle/oci-java-sdk/blob/master/bmc-examples/src/main/java/UploadObjectExample.java
如果由于某种原因您不能使用UploadManager
,则请查看其源代码,因为它演示了MultipartObjectAssembler
的预期用法:https://github.com/oracle/oci-java-sdk/blob/master/bmc-objectstorage/bmc-objectstorage-extensions/src/main/java/com/oracle/bmc/objectstorage/transfer/UploadManager.java#L175-L249
- 您创建
MultipartObjectAssembler
:
MultipartObjectAssembler assembler =
createAssembler(request,uploadRequest,executorServiceToUse);
- 您创建一个新请求。这会给您带来
MultipartManifest
的信息,以后您可以检查部件是否有故障。
manifest =
assembler.newRequest(
request.getContentType(),request.getContentLanguage(),request.getContentEncoding(),request.getOpcMeta());
- 然后添加所有部分:
assembler.addPart(
ProgressTrackingInputStreamFactory.create(
chunk,progressTrackerFactory.getProgressTracker()),chunk.length(),null);
- 然后您提交。这是您的代码当前抛出的位置。我怀疑不是所有部分都已添加。
CommitMultipartUploadResponse response = assembler.commit();
- 如果出现问题,请检查
MultipartManifest.listCompletedParts()
,MultipartManifest.listFailedParts()
和MultipartManifest.listInProgressParts()
。清单应告诉您哪些部分失败了。不幸的是,为什么?为此,您可以为ERROR
(特别是对于类com.oracle.bmc.objectstorage.transfer
)启用com.oracle.bmc.objectstorage.transfer.internal.MultipartTransferManager
级日志记录。
如果我有误解,请告诉我。在这种情况下,更大,更完整的代码段将帮助我进行调试。谢谢!