MultipartObjectAssembler OCI对象存储失败的原因

问题描述

我正在使用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

  1. 您创建MultipartObjectAssembler
MultipartObjectAssembler assembler =
                createAssembler(request,uploadRequest,executorServiceToUse);
  1. 您创建一个新请求。这会给您带来MultipartManifest的信息,以后您可以检查部件是否有故障。
manifest =
                    assembler.newRequest(
                            request.getContentType(),request.getContentLanguage(),request.getContentEncoding(),request.getOpcMeta());
  1. 然后添加所有部分:
                    assembler.addPart(
                            ProgressTrackingInputStreamFactory.create(
                                    chunk,progressTrackerFactory.getProgressTracker()),chunk.length(),null);
  1. 然后您提交。这是您的代码当前抛出的位置。我怀疑不是所有部分都已添加。
CommitMultipartUploadResponse response = assembler.commit();
  1. 如果出现问题,请检查MultipartManifest.listCompletedParts()MultipartManifest.listFailedParts()MultipartManifest.listInProgressParts()。清单应告诉您哪些部分失败了。不幸的是,为什么?为此,您可以为ERROR(特别是对于类com.oracle.bmc.objectstorage.transfer)启用com.oracle.bmc.objectstorage.transfer.internal.MultipartTransferManager级日志记录。

如果我有误解,请告诉我。在这种情况下,更大,更完整的代码段将帮助我进行调试。谢谢!