Coleman S
Coleman S

Reputation: 498

Specify byte range via query string in Get Object S3 request

I'm familiar with the Range HTTP header; however, the interface I'm using to query S3 (an img element's .src property) doesn't allow me to specify HTTP headers.

Is there a way for me to specify my desired range via a parameter in the query string?

It doesn't seem like there is, but I'm just holding out a shred of hope before I roll my own solution with ajax requests.

Upvotes: 11

Views: 26601

Answers (2)

Sanjay Bharwani
Sanjay Bharwani

Reputation: 4799

Below is the Java Code with AWS V2 SDK

format the range as below

var range = String.format("bytes=%d-%d", start, end);

and pass it in below api with GetObjectRequest builder

 ResponseBytes<GetObjectResponse> currentS3Obj = client.getObjectAsBytes(GetObjectRequest.builder().bucket(bucket).key(key).range(range).build());
return currentS3Obj.asInputStream();

Upvotes: 0

Mike Feng
Mike Feng

Reputation: 241

Amazon S3 supports Range GET requests, as do some HTTP servers, for example, Apache and IIS.

How CloudFront Processes Partial Requests for an Object (Range GETs)

I tried to get my S3 object via cURL:

curl -r 0-1024 https://s3.amazonaws.com/mybucket/myobject -o part1
curl -r 1025-  https://s3.amazonaws.com/mybucket/myobject -o part2
cat part1 part2 > myobject

and AWS SDK for JavaScript:

var s3 = new AWS.S3();
var file = require('fs').createWriteStream('part1');
var params = {
    Bucket: 'mybucket',
    Key: 'myobject',
    Range: 'bytes=0-1024'
};
s3.getObject(params).createReadStream().pipe(file);

These two methods work fine for me.

AWS SDK for JavaScript API Reference (getObject)

Upvotes: 24

Related Questions