将非常大的文件上传到 Swift 容器
Upload Very Large File to Swift Container
我正在使用 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 loop
中,每个循环输入是矩阵的索引(这是一个字节数组)
但问题是,OpenStack 会考虑每个循环(分段上传)都链接到前一部分吗?怎么做?
你可以在 multipart
中说 multipart
谢谢
jclouds 提供两种选择:
1) 调用各个多部分方法,例如 initiateMultipartUpload
、uploadMultipartPart
和 completeMultipartUpload
.
2) 创建一个 InputStream
或 ByteSource
有效负载,将各个部分连接起来,例如SequenceInputStream
或 ByteSource.concat
.
请注意,使用 ByteSource.wrap(bytes)
而不是 ByteArrayInputStream(bytes)
可使有效载荷可重复,jclouds 将在出现网络错误时重试。
我正在使用 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 loop
中,每个循环输入是矩阵的索引(这是一个字节数组)
但问题是,OpenStack 会考虑每个循环(分段上传)都链接到前一部分吗?怎么做? 你可以在 multipart
中说 multipart谢谢
jclouds 提供两种选择:
1) 调用各个多部分方法,例如 initiateMultipartUpload
、uploadMultipartPart
和 completeMultipartUpload
.
2) 创建一个 InputStream
或 ByteSource
有效负载,将各个部分连接起来,例如SequenceInputStream
或 ByteSource.concat
.
请注意,使用 ByteSource.wrap(bytes)
而不是 ByteArrayInputStream(bytes)
可使有效载荷可重复,jclouds 将在出现网络错误时重试。