简体   繁体   中英

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.

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)

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();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM