112

1 回のアクションでtxt/pdf/png ファイルを Amazon S3にアップロードし、アップロードされたファイルの URL を応答として取得することはできますか?

もしそうなら、AWS Java SDK は Java struts2 Web アプリケーションに追加する必要がある適切なライブラリですか?

これに対する解決策を教えてください。

4

10 に答える 10

127

いいえ、1回のアクションでURLを取得することはできませんが、2回のアクションで取得できます:)

まず、誰もアクセスできない URL を取得しても意味がないため、アップロードする前にファイルを公開する必要がある場合があります。Michael Astreiko が提案したように ACL を設定することで、これを行うことができます。getResourceUrlまたはを呼び出して、リソース URL を取得できますgetUrl

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 にキャストする必要があります。

于 2015-06-26T17:58:16.380 に答える
91

アップロードリクエストで指定したバケットとファイル名を指定して、自分で解決できます。

たとえば、バケットがmybucketで、ファイルの名前が次の場合myfilename

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

バケットがどのリージョンにあるかによってビットが異なりますs3。たとえば、東南アジアリージョンを使用しているため、URLは次のようになります。

https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
于 2012-06-11T06:52:31.837 に答える
6

同様に、s3Client を介したリンクが必要な場合は、以下を使用できます。

System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));
于 2018-05-25T13:05:51.133 に答える
2

少し古いですが、将来これに出くわす人にとってはまだです:

CredentialProvider と AmazonS3Client を既に記述していると仮定すると、1 行で実行できます。

次のようになります。

 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
);
于 2017-08-10T14:49:19.810 に答える
-46

アップロードする前にファイルを公開するには、次の#withCannedAcl方法を使用できPutObjectRequestます。

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

String url = myAmazonS3Client.getUrl('some-grails-bucket',  'somePath/someKey.jpg').toString();
于 2012-10-07T13:49:49.100 に答える