On Mon, May 18, 2020 at 08:00:16PM -0000, John Calcote wrote: > I'm trying to create a sort of multi-part download mechanism using jclouds > download with a GetOption of "range". I'd like to just download 5MB ranges > until I run out of file to download. The doc on the use of this option is a > bit sparse. Can someone help me understand the semantics of download with a > range option? > > Here's what I'd like to do: > > long start = 0; > long size = 5 * 1024 * 1024; > long length = size; > > while (length < size) { > long limit = start + size > Blob blob = getBlob(container, key, range(start, limit - 1)); > ContentMetadata meta = blob.getMetadata().getContentMetadata(); > long length = meta.getContentLength(); > > // stream 'length' bytes into a buffer and process the buffer here > > start = limit; > } > > Assumptions: > 1) content length will return the actual size downloaded if it's less than > the range size specified. > 2) It's OK to request a range of bytes that's outside the file extant - > you'll just get back a length of zero.
BlobStore.getBlob takes an optional argument that you can populate via: new GetOptions().range(start, size) Note that this range is inclusive. -- Andrew Gaul http://gaul.org/