Amazon S3 上传文件并获取 URL

新手上路,请多包涵

是否可以通过单个操作将 txt/pdf/png 文件上传到 Amazon S3 ,并获取上传的文件 URL 作为响应?

如果是这样,AWS Java SDK 是我需要在我的 java struts2 Web 应用程序中添加的正确库吗?

请为此建议我一个解决方案。

原文由 Sangram Anand 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

要在上传之前公开文件,您可以使用 --- 的 PutObjectRequest #withCannedAcl 方法:

 myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket',  'somePath/someKey.jpg', new    File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))

String url = myAmazonS3Client.getUrl('some-grails-bucket',  'somePath/someKey.jpg').toString();

原文由 Michael Astreiko 发布,翻译遵循 CC BY-SA 4.0 许可协议

不,你不能通过一次操作获得 URL,而是两个 :)

首先,您可能必须在上传之前将文件公开,因为获取没有人可以访问的 URL 是没有意义的。您可以按照 Michael Astreiko 的建议设置 ACL。您可以通过调用 getResourceUrlgetUrl 获取资源 URL。

 AmazonS3Client s3Client = (AmazonS3Client)AmazonS3ClientBuilder.defaultClient();
s3Client.putObject(new PutObjectRequest("your-bucket", "some-path/some-key.jpg", new File("somePath/someKey.jpg")).withCannedAcl(CannedAccessControlList.PublicRead))
s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg");

注1: getResourceUrlgetUrl 的区别在于getResourceUrl在异常时返回null。

注 2: getUrl 方法未在 AmazonS3 接口中定义。如果您使用标准构建器,则必须将对象转换为 AmazonS3Client。

原文由 hussachai 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题