有没有你不使用的原因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-对象存储/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
)。
如果我误解了什么,请告诉我。在这种情况下,更大、更完整的代码片段将帮助我进行调试。谢谢!