这是一个基本问题,不是很先进,但我有点卡住了.
我试图获取在s3上托管的文件的前n个字节.我理解这个问题的基本构建块.我知道如何获取字节.以下是AmazonS3的一个示例
GET /example-object HTTP/1.1 Host: example-bucket.s3.amazonaws.com x-amz-date: Fri, 28 Jan 2011 21:32:02 GMT Range: bytes=0-9 Authorization: AWS AKIAIOSFODNN7EXAMPLE:Yxg83MZaEgh3OZ3l0rLo5RTX11o= Sample Response with Specified Range of the Object Bytes
现在我有一个s3网址,像这样:
http://s3.amazonaws.com/bucket-name/foo/1/2/3/4/file.jpg
如何将此翻译成文档中指定的请求?我知道这是补救措施,但是我被卡住了,这感觉有些不透明,尽管那可能只是我.
请帮我解构一下s3 url到GET请求示例的组件.感谢帮助!
更新:如果我要使用GetObjectRequest
api,我将使用什么用于存储桶和构造函数中的键?
UPDATE2:换句话说就是这么简单
// modelled after http://s3.amazonaws.com/foo/ private String s3UrlToBucket(String s3Url) { Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/.*$"); Matcher matcher = pattern.matcher(s3Url); if(matcher.find()) { return matcher.group(1); } return null; } // modelled after http://s3.amazonaws.com/foo/1/2/3/4.jpg private String s3UrlToKey(String s3Url) { Pattern pattern = Pattern.compile("^https?://[^/]+/[^/]+/(.*)$"); Matcher matcher = pattern.matcher(s3Url); if(matcher.find()) { return matcher.group(1); } return null; }
更新3:你能告诉我钥匙是什么意思吗???
如果您使用AWS SDK for Java,则只需在GetObjectRequest上设置范围.这是一个代码示例:
AmazonS3Client s3Client = new AmazonS3Client(); GetObjectRequest request = new GetObjectRequest("bucket-name", "foo/1/2/3/4/file.jpg"); request.withRange(0, numberOfBytesToGet); S3Object s3Object = s3Client.getObject(request); //s3Object.getObjectContent() has a stream to your object.