Amazon S3上传文件并获取URL

是否可以通过单个操作将txt / pdf / pngfile upload到Amazon S3,并获取上传的文件url作为响应。 如果是这样,那么AWS Java SDK是我需要在我的java struts2 web应用程序中添加的正确的库。

请为此build议我一个解决scheme。

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

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

根据您在上传请求中指定的存储桶和文件名,您可以自己完成这项工作。

例如,如果您的存储桶是mybucket并且您的文件被命名为myfilename

 https://mybucket.s3.amazonaws.com/myfilename 

s3位将根据您的存储区位于哪个区域而有所不同。例如,我使用东南亚地区,因此我的url如下所示:

 https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename 

不,你不能单一的行动,但两个url:)

首先,您可能必须在上传之前公开文件,因为获取无法访问的URL是没有意义的。 你可以通过设置迈克尔·阿斯特雷科build议的ACL来做到这一点。 您可以通过调用getResourceUrlgetUrl来获取资源URL。

 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"); 

getResourceUrlgetUrl的不同之处在于,当发生exception时,getResourceUrl将返回null。

有点老,但对于任何人在未来的这个绊脚石:

你可以用一行来完成,假设你已经写了CredentialProvider和AmazonS3Client。

它会看起来像这样:

  String ImageURL = String.valueOf(s3.getUrl( ConstantsAWS3.BUCKET_NAME, //The S3 Bucket To Upload To file.getName())); //The key for the uploaded object 

如果您没有编写CredentialProvider和AmazonS3Client,那么只需在获取URL之前添加它们即可:

  CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( getApplicationContext(), "POOL_ID", // Identity pool ID Regions.US_EAST_1 // Region );