如何使用提供的URL从s3下载文件?

Roh*_*han 6 amazon-s3 amazon-web-services aws-java-sdk

在我的应用程序中,我将获得s3文件的网址,例如:https : //s3.amazonaws.com/account-update/input.csv。 我必须先下载它,然后对其进行处理。我已经做了:

AmazonS3 s3 = new AmazonS3Client(credentials);
S3Object s3object = s3.getObject(new GetObjectRequest(
bucketName, key));
Run Code Online (Sandbox Code Playgroud)

我可以通过提供存储桶名称和密钥来下载文件,但是如何仅使用url(https://s3.amazonaws.com/account-update/input.csv)下载文件?

Joh*_*ein 7

您可以通过标准的curl / wget下载文件,就像从Internet上下载任何其他文件一样。

但是,重要的部分是允许从Amazon S3 访问对象。一些选择:

  • 使对象公开可读:可以通过控制台或CLI / API完成。但是,具有该URL的任何人都可以下载它。
  • 创建一个Amazon S3存储桶策略,该策略授予对所需文件/目录/存储桶的读取访问权限。但是,同样,具有URL的任何人都将能够访问那些对象。
  • 保持对象为私有,但使用预先签名的URL,该URL向URL添加参数以证明您被允许下载该对象。此预签名URL是有时间限制的,可以使用当前的AWS凭证通过几行代码生成。

  • 我看到了使用预签名 URL 上传对象的示例。我们如何生成预签名的下载 URL? (2认同)

Jaw*_*wad 5

您可以考虑使用如下所示的AWS开发工具包类AmazonS3URI

URI fileToBeDownloaded = new URI(" https://s3.amazonaws.com/account-update/input.csv"); 

AmazonS3URI s3URI = new AmazonS3URI(fileToBeDownloaded);

S3Object s3Object = s3Client.getObject(s3URI.getBucket(), s3URI.getKey());
Run Code Online (Sandbox Code Playgroud)

从这里开始,您应该能够使用以与代码中显示的s3Object类似的方式获得的s3Object。

有关使用此类的更多与Java相关的AWS开发工具包示例,请在此处查看


ITA*_*nNC 3

要启用 HTTP 访问,您必须在 S3 控制台中将存储桶设置为静态网站。请注意,除非您设置适当的S3 访问控制,否则这会将您的所有数据暴露到网络上。

不过,您通过 Java SDK 访问的方法不会使用这种类型的连接。它将通过内置的 S3 协议进行连接。您应该检查您的 IAM 角色或策略以确保您拥有正确的权限 ( s3:GetObject)。s3:ListBucket如果该对象不存在,您还需要看到 404。