web-dev-qa-db-ja.com

提供されたURLを使用してs3からファイルをダウンロードする方法

私のアプリケーションでは、次のようなs3ファイルのURLを取得します。 https://s3.amazonaws.com/account-update/input.csv ダウンロードして処理する必要があります。私がすでにしたこと:

AmazonS3 s3 = new AmazonS3Client(credentials);
S3Object s3object = s3.getObject(new GetObjectRequest(
bucketName, key));

バケット名とキーを指定してファイルをダウンロードできますが、url( https://s3.amazonaws.com/account-update/input.csv )を使用してファイルをダウンロードするにはどうすればよいですかのみ?

8
Rohit Chouhan

インターネットから他のファイルをダウンロードするのと同じように、標準のcurl/wgetを介してファイルをダウンロードできます。

ただし、重要な部分はオブジェクトへのアクセスを有効にする Amazon S3からです。いくつかのオプション:

  • オブジェクトを公開読み取り可能にします]これは、コンソールまたはCLI/APIを介して実行できます。ただし、そのURLがあれば誰でもダウンロードできます。
  • 作成 Amazon S3バケットポリシー目的のファイル/ディレクトリ/バケットの読み取りアクセスを許可します。しかし、繰り返しになりますが、URLを持っている人はだれでもこれらのオブジェクトにアクセスできます。
  • オブジェクトを非公開にしますが、オブジェクトのダウンロードが許可されていることを証明するためにURLにパラメーターを追加するse a pre-signed URLを使用します。この事前署名済みURLは時間制限があり、現在のAWS認証情報を使用して数行のコードで生成できます。
4
John Rotenstein

以下に示すように、AWS SDKクラス AmazonS3URI の使用を検討できます。

URI fileToBeDownloaded = new URI(" https://s3.amazonaws.com/account-update/input.csv"); 

AmazonS3URI s3URI = new AmazonS3URI(fileToBeDownloaded);

S3Object s3Object = s3Client.getObject(s3URI.getBucket(), s3URI.getKey());

ここからは、コードに示されているs3Objectと同様の方法で取得したs3Objectを利用できるはずです。

その他のJavaこのクラスの使用に関するAWS SDKの例を確認するには ここ

2
Jawad

HTTPによるアクセスを有効にするには、S3コンソールでバケットを Static Website として設定する必要があります。注意してください。これは、適切な S3アクセス制御を設定しない限り、すべてのデータをWebに公開します。

Java SDKを介してアクセスしているメソッドは、このタイプの接続を使用しません。ただし、組み込みのS3プロトコルを介して接続します。IAMロールまたはポリシーを調べて、正しい権限(s3:GetObject)を持っています。オブジェクトが存在しない場合に404​​を表示するには、s3:ListBucketも必要です。

1
ITAdminNC

John Rotensteinは正しいです。標準のcurl/wgetを使用して、URLからファイルをダウンロードできます。

Javaを使用してこれを行う場合は、次のような方法でうまくいくはずです。 Apache HttpComponents パッケージを利用する

private void downloadRequest(String url, String savedFile) {
    HttpClient client = HttpClients.createDefault();

    HttpGet httpGet = new HttpGet(url);
    HttpResponse response;
    try {
        response = client.execute(httpGet);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            try (FileOutputStream outstream = new FileOutputStream(savedFile)) {
                entity.writeTo(outstream);
            } catch (IOException e) {
                LOGGER.info(e.getMessage());
            }
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
} 
0
Chris Turner

できませんが、アップロード時に添付ファイルを作成できます。

例として:

ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("application/csv;charset=utf-8");
objectMetadata.setContentDisposition("attachment");
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, arquivo, file, objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead);
amazonS3.putObject(putObjectRequest);

お役に立てば幸いです。

0

ブラウザにURLを入力するだけですが、必ず\u0026& curl経由でURLをダウンロードした場合は、このエラーが発生します

<Error>
    <Code>AuthorizationQueryParametersError</Code>
    <Message>X-Amz-Algorithm only supports "AWS4-HMAC-SHA256"</Message>
</Error>
0
Riya John

cLIを使用:aws s3 cp s3:// bucket/prefix/key targetlocalfolder

0
tooptoop4

最良の方法は、署名済みのS3 URLを使用してニーズを達成することです。署名付きURLに有効期限を追加すると、そのURLは使用できなくなります。

詳細については、次のページをご覧ください。

https://docs.aws.Amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLJavaSDK.html

0
Reza Mousavi