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

时间:2018-03-26 15:22:14

标签: java upload openstack-swift jclouds

我使用jclouds java SDK上传到Swift Container我看到我上传为多部分的代码,我已经使用代码作为输入流上传为多部分

    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 loop和每个循环的输入是一个矩阵的索引(这是一个字节数组)

但问题是,OpenStack会考虑每个循环(分段上传)是否与前一部分相关联?怎么做? 你可以在多部分中说出一个多部分

由于

1 个答案:

答案 0 :(得分:1)

jclouds提供两种选择:

1)调用各个多部分方法,例如initiateMultipartUploaduploadMultipartPartcompleteMultipartUpload

2)创建一个InputStreamByteSource个有效负载,用于连接各个部分,例如: SequenceInputStreamByteSource.concat

请注意,使用ByteSource.wrap(bytes)代替ByteArrayInputStream(bytes)会使有效负载重复,jcloud会重试网络错误。