亚马逊S3上传文件,并得到URL(Amazon S3 upload file and get URL

2019-06-25 10:03发布

是否有可能上传一个动作一个TXT / PDF / PNG文件到Amazon S3,并获得上传的文件URL作为响应。 如果是这样,AWS Java SDK的,我需要在我的Java web应用Struts2的添加正确的库。

请建议我一个解决方案。

Answer 1:

为了使文件上传市民可以使用之前#withCannedAcl的方法PutObjectRequest

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


Answer 2:

不,你不能获得单一行动,但两个网址:)

首先,你可能有上传,因为它是没有意义的获得,没有人可以访问网址前使文件公开。 您可以通过设置ACL迈克尔Astreiko建议这样做。 你可以通过调用获取资源的URL或者getResourceUrlgetUrl

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如果你使用标准的建设者。



Answer 3:

你可以解决它自己给出的桶和您在上传请求中指定的文件名。

例如,如果你的水桶是mybucket和你的文件名为myfilename

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

s3位将取决于哪个区域的桶中是不同的。例如,我用的是东南亚地区,所以我的网址是这样的:

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


Answer 4:

同样,如果你通过s3Client想要链接,您可以使用以下。

System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));


Answer 5:

有点老,但仍然有人在将来在这个绊脚石:

你可以用一条线假设你已经写了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
);


Answer 6:

        System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());

这样,你可以检索已上传文件到S3存储的链接。



文章来源: Amazon S3 upload file and get URL