0

我正在使用 MultipartObjectAssembler 将数据从数据库上传到 OCI 对象存储。使用分段上传时有没有办法知道失败的原因?

当我尝试提交汇编程序时,我收到 IllegalStateException 消息“一个或多个部分尚未成功完成上传”。我想知道为什么任何部分都失败了?我找不到从 SDK 获取此信息的方法。

try {
    assembler.addPart(new ByteArrayInputStream(part, 0, length),
                    length,
                    null);

    assembler.commit();
} catch (Exception e) {
    assembler.abort();
    throw new RuntimeException(e.getMessage());
} 

编辑:我需要获取失败部分引发的异常并传播错误消息。

4

1 回答 1

2

有没有你不使用的原因UploadManager?它应该为您做所有事情,包括添加部分和提交。这是一个端到端的例子:https ://github.com/oracle/oci-java-sdk/blob/master/bmc-examples/src/main/java/UploadObjectExample.java

如果由于某种原因您不能使用UploadManager,请查看它的源代码,因为它演示了以下用途MultipartObjectAssemblerhttps ://github.com/oracle/oci-java-sdk/blob/master/bmc-对象存储/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)。

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

于 2020-10-29T00:01:19.523 回答