web-dev-qa-db-ja.com

プログラムでパブリックS3オブジェクトのURL(リンク)を取得する

与えられたJava APIをサーバーで使用して、AWS S3バケットに1つのパブリックオブジェクトを保存しています。ここで、S3オブジェクトのパブリックURLをクライアントに返す必要があります。

これまで、S3オブジェクトのパブリックURL(またはリンクフィールド)を返すことができるAPI呼び出しを見つけていません

URLを取得する方法はありますか?

18
Neel Choudhury
s3Client.getUrl(AWS_BUCKET, s3RelativeFilePath).toExternalForm();    

以前のバージョンでは:

s3Client.getResourceUrl(bucket, s3RelativeToBucketPath);
25
Strinder

使ってます - aws-Java-sdk-s3 1.11.58

受け入れられた回答はこのバージョンでは機能しません。

以下の行はこのバージョンで機能します

s3Client.getUrl(AWS_BUCKET, s3RelativeFilePath).toExternalForm();
4
Govind Singh

SDK-2バージョンの場合、Kotlin:

s3.utilities().getUrl { it.bucket("BUCKET").key("FILEPATH") }.toExternalForm()
2
Pavel Shorokhov
"https://"+{bucket}.s3.amazonaws.com+"/"+key

このURLは、S3のオブジェクト概要のリンクとは異なる場合があります。しかし、それは同じように機能します。注:オブジェクト概要のリンクは通常、次のようになります。

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

プライベートバケットがあり、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を構築することを検討してください。

0
karthik