我在服务器中使用给定的Java API在AWS S3存储桶中存储一个公共对象 现在我需要将S3对象的公共URL返回给我的客户端
直到现在我还没有找到任何可以返回S3对象的公共URL(或链接字段)的API调用
有没有办法获取网址?
答案 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中对象的网址