与えられたJava APIをサーバーで使用して、AWS S3バケットに1つのパブリックオブジェクトを保存しています。ここで、S3オブジェクトのパブリックURLをクライアントに返す必要があります。
これまで、S3オブジェクトのパブリックURL(またはリンクフィールド)を返すことができるAPI呼び出しを見つけていません
URLを取得する方法はありますか?
s3Client.getUrl(AWS_BUCKET, s3RelativeFilePath).toExternalForm();
以前のバージョンでは:
s3Client.getResourceUrl(bucket, s3RelativeToBucketPath);
使ってます - aws-Java-sdk-s3 1.11.58
受け入れられた回答はこのバージョンでは機能しません。
以下の行はこのバージョンで機能します
s3Client.getUrl(AWS_BUCKET, s3RelativeFilePath).toExternalForm();
SDK-2バージョンの場合、Kotlin:
s3.utilities().getUrl { it.bucket("BUCKET").key("FILEPATH") }.toExternalForm()
"https://"+{bucket}.s3.amazonaws.com+"/"+key
このURLは、S3のオブジェクト概要のリンクとは異なる場合があります。しかし、それは同じように機能します。注:オブジェクト概要のリンクは通常、次のようになります。
https://s3-ap-southeast-2.amazonaws.com/{bucket}/{key}
プライベートバケットがあり、URLを必要とするユーザーの場合
私の場合、バケットはprivateであるため、特定の時間、S3オブジェクトのダウンロード可能なリンクを取得する必要がありました。
私はSpring Cloud AWSを使用していますが、内部ではAWS SDKを使用してJavaであり、S3と対話するためのAmazonSインターフェースを提供しますAmazonS3Client)を使用します AWS SDKを使用している場合Javaの代わりにAmazonSを挿入しました。AmazonSを挿入しただけで、オブジェクトは必要な場所にありますが、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;
}
}
}
毎回s3にリクエストを出してURLをフェッチするだけでなく、バケット名とオブジェクトキーを使用してURLを構築することを検討してください。