以编程方式获取公共S3对象的URL(链接)

时间:2014-01-31 18:08:51

标签: java amazon-web-services amazon-s3

我在服务器中使用给定的Java API在AWS S3存储桶中存储一个公共对象 现在我需要将S3对象的公共URL返回给我的客户端

直到现在我还没有找到任何可以返回S3对象的公共URL(或链接字段)的API调用

有没有办法获取网址?

8 个答案:

答案 0 :(得分:14)

s3Client.getUrl(AWS_BUCKET,s3RelativeFilePath).toExternalForm();

旧版本: s3Client.getResourceUrl(bucket,s3RelativeToBucketPath);

答案 1 :(得分:2)

我正在使用 aws-java-sdk-s3 1.11.58

接受的答案不适用于此版本。

以下行适用于此版本

s3Client.getUrl(AWS_BUCKET, s3RelativeFilePath).toExternalForm();

答案 2 :(得分:2)

"https://"+{bucket}.s3.amazonaws.com+"/"+key

此URL可能与S3中对象概述中的链接有所不同。但它的工作原理是一样的。 注意:对象概述中的链接通常类似于

  https://s3-ap-southeast-2.amazonaws.com/{bucket}/{key}

答案 3 :(得分:0)

考虑使用存储桶名称和对象密钥构建网址,而不是每次都向s3发出请求以获取网址。

答案 4 :(得分:0)

对于拥有私有存储桶并需要URL的用户。

在我的情况下,由于我的存储桶为私有,因此必须在特定时间内获得S3 Object的可下载链接。

我正在使用Spring Cloud AWS,该引擎在幕后使用Java的AWS开发工具包,并且提供了 AmazonS3 界面以与S3进行交互,如果您要使用,请使用 AmazonS3Client 使用适用于JAVA的AWS开发工具包而不是 AmazonS3 。我只是注入了 AmazonS3 ,现在我可以在任何需要的地方获取对象的URL,但是可以在5分钟内下载它,否则它将过期。

 public String getURL(String key) throws FileNotFoundException
{
    try {
        return amazonS3.generatePresignedUrl(BUCKET_NAME, key, new DateTime().plusMinutes(5).toDate()).toString();
    }
    catch (AmazonS3Exception exception){
        if(exception.getStatusCode() == 404){
            throw new FileNotFoundException(key);
        }
        else{
            throw exception;
        }
    }
}

答案 5 :(得分:0)

对于SDK-2版本,Kotlin:

s3.utilities().getUrl { it.bucket("BUCKET").key("FILEPATH") }.toExternalForm()

答案 6 :(得分:-3)

公共URL只是与桶端点(my/object.txt)连接的对象名称(ex mybucket.s3.amazonaws.com),或者如果您已将其设置为网站,即网站端点。

当您将对象上传到s3时,您实际上是在与最终用户交互的相同的resti api上;你PUT对象,他们GET

答案 7 :(得分:-3)

" https://s3.amazonaws.com/" + bucketName +" /" +键应该为您提供s3中对象的网址