Загрузить очень большой файл в контейнер Swift

Я использую 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 считать, что каждый цикл (многочастная загрузка) связан с предыдущей частью? как это сделать? вы можете сказать multipart внутри multipart

Спасибо


person ibr    schedule 26.03.2018    source источник


Ответы (1)


jclouds предлагает два варианта:

1) Вызвать отдельные составные методы, например, initiateMultipartUpload, uploadMultipartPart и completeMultipartUpload.

2) Создайте полезные данные InputStream или ByteSource, которые объединяют отдельные части, например. SequenceInputStream или ByteSource.concat.

Обратите внимание, что использование ByteSource.wrap(bytes) вместо ByteArrayInputStream(bytes) делает полезную нагрузку повторяемой, и jclouds будет повторять попытки при сетевых ошибках.

person Andrew Gaul    schedule 26.03.2018
comment
Большое спасибо, еще один вопрос, имеет ли какой-либо из двух методов, которые вы упомянули, преимущество перед другим? потому что в большинстве случаев многокомпонентной загрузки я использую второй метод или метод, который они упоминают в примерах jclouds - person ibr; 27.03.2018
comment
Вы должны предпочесть второй вариант, так как он может работать с минимальными размерами деталей и другими мелочами. - person Andrew Gaul; 27.03.2018
comment
и я полагаю, что если сетевая ошибка или любая другая ошибка, она также будет обработана, верно? - person ibr; 27.03.2018
comment
jclouds будет обрабатывать сетевые ошибки, если вы предоставите повторяемую полезную нагрузку, например ByteSource. - person Andrew Gaul; 27.03.2018