是否有可能上传一个动作一个TXT / PDF / PNG文件到Amazon S3,并获得上传的文件URL作为响应。 如果是这样,AWS Java SDK的,我需要在我的Java web应用Struts2的添加正确的库。
请建议我一个解决方案。
是否有可能上传一个动作一个TXT / PDF / PNG文件到Amazon S3,并获得上传的文件URL作为响应。 如果是这样,AWS Java SDK的,我需要在我的Java web应用Struts2的添加正确的库。
请建议我一个解决方案。
为了使文件上传市民可以使用之前#withCannedAcl
的方法PutObjectRequest
:
myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket', 'somePath/someKey.jpg', new File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))
不,你不能获得单一行动,但两个网址:)
首先,你可能有上传,因为它是没有意义的获得,没有人可以访问网址前使文件公开。 您可以通过设置ACL迈克尔Astreiko建议这样做。 你可以通过调用获取资源的URL或者getResourceUrl
或getUrl
。
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:之间的不同getResourceUrl
和getUrl
是,当发生异常时getResourceUrl将返回null。
注2: getUrl
方法未在AmazonS3接口定义。 你有对象转换为AmazonS3Client如果你使用标准的建设者。
你可以解决它自己给出的桶和您在上传请求中指定的文件名。
例如,如果你的水桶是mybucket
和你的文件名为myfilename
:
https://mybucket.s3.amazonaws.com/myfilename
在s3
位将取决于哪个区域的桶中是不同的。例如,我用的是东南亚地区,所以我的网址是这样的:
https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
同样,如果你通过s3Client想要链接,您可以使用以下。
System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));
有点老,但仍然有人在将来在这个绊脚石:
你可以用一条线假设你已经写了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
);
System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());
这样,你可以检索已上传文件到S3存储的链接。