Java 将非常大的文件上载到Swift容器

Java 将非常大的文件上载到Swift容器,java,upload,openstack-swift,jclouds,Java,Upload,Openstack Swift,Jclouds,我正在使用jclouds java SDK上传到Swift容器中,我看到了作为多部分上传的代码,我已经使用代码作为多部分上传作为输入流 try (ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes)) { ///input here is InputStream not ByteSource Payload payload = P

我正在使用jclouds java SDK上传到Swift容器中,我看到了作为多部分上传的代码,我已经使用代码作为多部分上传作为输入流

    try (ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes)) {
                    ///input here is InputStream not ByteSource
                    Payload payload = Payloads.newInputStreamPayload(inputStream);
                    Blob blob = blobStore.blobBuilder(path).payload(payload).build();
                    ///sednig the request
                    blobStore.putBlob(ContainerName, blob, multipart());
                    System.out.println(String.format("End upload all Parts, parts number=%s, part size=%s", strPartsCount, strPartSize));  
}
但是我有一个例子,我有一个非常大的文件,它的输入是一个字节矩阵,解决方法很简单,就是把相同的代码放在一个
for循环中,每个循环的输入是矩阵的索引(这是一个字节数组)

但是问题是,OpenStack会考虑每个循环(多个部分上传)链接到上一个部分吗?怎么做? 您可以在多部分中说多部分


谢谢

jclouds提供了两个选项:

1) 调用各个多部分方法,例如,
initiateMultipartUpload
uploadMultipartPart
,和
completeMultippartUpload

2) 创建连接各个部分的
InputStream
ByteSource
有效载荷,例如
SequenceInputStream
ByteSource.concat


请注意,使用
ByteSource.wrap(bytes)
而不是
ByteArrayInputStream(bytes)
会使负载可重复,jclouds将在网络错误时重试。

jclouds提供两个选项:

1) 调用各个多部分方法,例如,
initiateMultipartUpload
uploadMultipartPart
,和
completeMultippartUpload

2) 创建连接各个部分的
InputStream
ByteSource
有效载荷,例如
SequenceInputStream
ByteSource.concat


请注意,使用
ByteSource.wrap(bytes)
而不是
ByteArrayInputStream(bytes)
会使有效负载可重复,jclouds会在网络错误时重试。

非常感谢,还有一个问题,您提到的两种方法中的任何一种都比另一种有优势吗?因为大多数多部分上传案例我都使用第二种方法,或者jclouds示例中提到的方法。您应该更喜欢第二种方法,因为它可以处理最小零件尺寸和其他杂物。我相信如果出现网络错误或任何其他错误,它也会得到处理,对吗?如果您提供像ByteSource这样的可重复负载,jclouds将处理网络错误。非常感谢,还有一个问题,您提到的两种方法中的任何一种都比另一种有优势吗?因为大多数多部分上传案例我都使用第二种方法,或者jclouds示例中提到的方法。您应该更喜欢第二种方法,因为它可以处理最小零件尺寸和其他杂物。我相信如果出现网络错误或任何其他错误,它也会得到处理,对吗?如果您提供像ByteSource这样的可重复负载,jclouds将处理网络错误。