【问题标题】:Upload Very Large File to Swift Container将超大文件上传到 Swift 容器
【发布时间】:2018-03-26 15:22:13
【问题描述】:

我正在使用 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 会考虑每个循环(分段上传)都链接到前一部分吗?怎么做? 你可以在一个多部分中说一个多部分

谢谢

【问题讨论】:

    标签: java upload openstack-swift jclouds


    【解决方案1】:

    jclouds 提供两种选择:

    1) 调用单独的多部分方法,例如,initiateMultipartUploaduploadMultipartPartcompleteMultipartUpload

    2) 创建一个InputStreamByteSource 有效载荷,将各个部分连接起来,例如SequenceInputStreamByteSource.concat

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

    【讨论】:

    • 非常感谢,再问一个问题,您提到的两种方法中的任何一种是否比另一种具有优势?因为大多数分段上传案例我使用第二种方法,或者它们在 jclouds 示例中提到的方法
    • 您应该更喜欢第二个选项,因为它可以处理最小零件尺寸和其他杂物。
    • 我相信如果出现网络错误或任何其他错误,它也会得到处理,对吧?
    • 如果您提供像 ByteSource 这样的可重复有效负载,jclouds 将处理网络错误。
    猜你喜欢
    • 2017-03-11
    • 2011-12-12
    • 1970-01-01
    • 2014-11-16
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多