私のアプリケーションでは、次のような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 )を使用してファイルをダウンロードするにはどうすればよいですかのみ?
インターネットから他のファイルをダウンロードするのと同じように、標準のcurl/wgetを介してファイルをダウンロードできます。
ただし、重要な部分はオブジェクトへのアクセスを有効にする Amazon S3からです。いくつかのオプション:
以下に示すように、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の例を確認するには ここ
HTTPによるアクセスを有効にするには、S3コンソールでバケットを Static Website として設定する必要があります。注意してください。これは、適切な S3アクセス制御を設定しない限り、すべてのデータをWebに公開します。
Java SDKを介してアクセスしているメソッドは、このタイプの接続を使用しません。ただし、組み込みのS3プロトコルを介して接続します。IAMロールまたはポリシーを調べて、正しい権限(s3:GetObject
)を持っています。オブジェクトが存在しない場合に404を表示するには、s3:ListBucket
も必要です。
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();
}
}
できませんが、アップロード時に添付ファイルを作成できます。
例として:
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);
お役に立てば幸いです。
ブラウザにURLを入力するだけですが、必ず\u0026
と&
curl経由でURLをダウンロードした場合は、このエラーが発生します
<Error> <Code>AuthorizationQueryParametersError</Code> <Message>X-Amz-Algorithm only supports "AWS4-HMAC-SHA256"</Message> </Error>
cLIを使用:aws s3 cp s3:// bucket/prefix/key targetlocalfolder
最良の方法は、署名済みのS3 URLを使用してニーズを達成することです。署名付きURLに有効期限を追加すると、そのURLは使用できなくなります。
詳細については、次のページをご覧ください。
https://docs.aws.Amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLJavaSDK.html