使用预签名URL从AWS s3读取文件的内容

时间:2017-05-16 13:45:33

标签: amazon-web-services amazon-s3 aws-java-sdk

我正在尝试使用AWS Java Sdk从s3存储桶读取和打印文件的内容。我有一个预先签名的URL,允许我访问(和下载)该文件。但是,我无法使用预签名URL读取文件。

我希望做一些类似于下面代码片段的内容 -

public void readFromS3(String bucketName, String key) throws IOException {
S3Object s3object = s3.getObject(new GetObjectRequest(bucketName, key));
System.out.println(s3object.getObjectMetadata().getContentType());
System.out.println(s3object.getObjectMetadata().getContentLength());

BufferedReader reader = new BufferedReader(new InputStreamReader(s3object.getObjectContent()));

String line;

while((line = reader.readLine()) != null) {
// can copy the content locally as well
// using a buffered writer

System.out.println(line);
}
}

我有权访问的网址,让我下载文件。

我也查看了以下参考文献但没有成功 -

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/GetObjectRequest.html

有人可以帮忙吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

如果您有预先签名的网址,则无需使用AWS sdk访问S3对象。

正如@EricNord所评论的那样,url本身通过S3提供身份验证以允许访问。该URL将在查询参数中附加STS标记,从而启用身份验证。

基本HTTP客户端将能够读取URL的内容。

答案 1 :(得分:1)

使用URLConnection可能是最简单的方法,因为其他人已经指出它只是一个常规的HTTP URL。

BufferedReader reader = new BufferedReader(new InputStreamReader(URI.create(presignedUrl).toURL().openConnection().getInputStream())