使用预签名 URL 从 AWS s3 读取文件内容
Read the contents of a file from AWS s3 using its Pre-signed URL
我正在尝试使用 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);
}
}
URL我可以访问,让我下载文件。
我也查看了以下参考资料,但没有成功 -
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html
有人可以帮忙吗?
提前致谢!
如果您有预签名URL,则无需使用AWS sdk 访问S3 对象。
正如@EricNord 评论的那样,url 本身提供了 S3 身份验证以允许访问。 URL 将在查询参数中附加一个 STS 令牌,以启用身份验证。
基本的 HTTP 客户端将能够读取 URL 的内容。
使用 URLConnection 可能是最简单的方法,正如其他人指出的那样,此时它只是一个常规的 HTTP URL。
BufferedReader reader = new BufferedReader(new InputStreamReader(URI.create(presignedUrl).toURL().openConnection().getInputStream())
你可以用 TransferManager 做得很好 :)
String presignedURL = "presignedURL";
String targetDestination = "fileLocation"
new TransferManager().download(new PresignedUrlDownloadRequest(new URL(presignedURL)),
new File(targetDestination)).waitForCompletion();
我正在尝试使用 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);
}
}
URL我可以访问,让我下载文件。
我也查看了以下参考资料,但没有成功 -
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html
有人可以帮忙吗?
提前致谢!
如果您有预签名URL,则无需使用AWS sdk 访问S3 对象。
正如@EricNord 评论的那样,url 本身提供了 S3 身份验证以允许访问。 URL 将在查询参数中附加一个 STS 令牌,以启用身份验证。
基本的 HTTP 客户端将能够读取 URL 的内容。
使用 URLConnection 可能是最简单的方法,正如其他人指出的那样,此时它只是一个常规的 HTTP URL。
BufferedReader reader = new BufferedReader(new InputStreamReader(URI.create(presignedUrl).toURL().openConnection().getInputStream())
你可以用 TransferManager 做得很好 :)
String presignedURL = "presignedURL";
String targetDestination = "fileLocation"
new TransferManager().download(new PresignedUrlDownloadRequest(new URL(presignedURL)),
new File(targetDestination)).waitForCompletion();