AWS SDK for Javaを使用したファイルのアップロードとダウンロード
8758 ワード
AWS SDK for Javaを使用してファイルをアップロードおよびダウンロードします.amazonaws.cn中国区のアカウントがあります.
アクセスキーの取得,demo構成,demo実行エラーの解決方法について述べた.
1.アクセスキーの取得
ログインhttps://console.amazonaws.cn/iam/home、左側の「ユーザー」をクリックして、自分のアカウントを選択します.「セキュリティ証明書」をクリックすると、下にアクセス鍵があり、私のアカウントは2つの鍵しか申請できません.前のkeyはもう知りませんでした.古い申請を削除して新しいものを申請すればいいです.手に入れたのはaws_access_key_idとaws_secret_access_key .
2.鍵の構成
2.1プロファイル方式
参考記事http://docs.aws.amazon.com/zh_cn/sdk-for-java/v 1/developer-guide/setup-credentials.html:
ファイルには以下の形式の行が含まれており、自分のAWS証明書値で値を置換します.access_key_idとyour_secret_access_key.
AmazonS 3の初期化
2.2パラメータ方式
公式ドキュメントに記載されている鍵の構成方法は、特定のディレクトリの下にプロファイルを配置する必要があり、エンジニアリングの導入が不便です.パラメータ方式で初期化する方法を探しました.
3.私の最初のアップロードdemo
公式文書を参照http://docs.aws.amazon.com/zh_cn/AmazonS 3/latest/dev/UploadObjSingleOpJava.htmlは、独自のプロジェクトにUploadObjectSingleOperationクラスを新設しました.構成する必要がある3つの項目は以下の通りです.
依存パッケージ(gradle)
Demo失敗原因1
解決策、ゾーンの設定:
4.ファイルのダウンロード
公式ドキュメントを参照してください.http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/GettingObjectsUsingAPIs.html http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/RetrievingObjectUsingJava.html GetObject.java
同じようにエリア設定のコードも加えれば、このdemoを走ることができます.
5.私のDemo
アクセスキーの取得,demo構成,demo実行エラーの解決方法について述べた.
1.アクセスキーの取得
ログインhttps://console.amazonaws.cn/iam/home、左側の「ユーザー」をクリックして、自分のアカウントを選択します.「セキュリティ証明書」をクリックすると、下にアクセス鍵があり、私のアカウントは2つの鍵しか申請できません.前のkeyはもう知りませんでした.古い申請を削除して新しいものを申請すればいいです.手に入れたのはaws_access_key_idとaws_secret_access_key .
2.鍵の構成
2.1プロファイル方式
参考記事http://docs.aws.amazon.com/zh_cn/sdk-for-java/v 1/developer-guide/setup-credentials.html:
~/.aws/credentials ( Linux、macOS Unix)
C:\Users\USERNAME\.aws\credentials ( Windows )
ファイルには以下の形式の行が含まれており、自分のAWS証明書値で値を置換します.access_key_idとyour_secret_access_key.
[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key
AmazonS 3の初期化
AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
2.2パラメータ方式
公式ドキュメントに記載されている鍵の構成方法は、特定のディレクトリの下にプロファイルを配置する必要があり、エンジニアリングの導入が不便です.パラメータ方式で初期化する方法を探しました.
AWSCredentials credentials = new BasicAWSCredentials(
myConfig.AWS_ACCESS_KEY_ID, myConfig.AWS_SECRET_ACCESS_KEY);
AmazonS3 s3Client = new AmazonS3Client(credentials);
3.私の最初のアップロードdemo
公式文書を参照http://docs.aws.amazon.com/zh_cn/AmazonS 3/latest/dev/UploadObjSingleOpJava.htmlは、独自のプロジェクトにUploadObjectSingleOperationクラスを新設しました.構成する必要がある3つの項目は以下の通りです.
private static String bucketName = " AWS S3 ";
private static String keyName = " key, , key , ";
private static String uploadFileName = " ";
依存パッケージ(gradle)
// https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3
compile group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.11.238'
Demo失敗原因1
java.lang.reflect.InvocationTargetException: null
……
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to englishresourcebucket.s3.amazonaws.com:443 [englishresourcebucket.s3.amazonaws.com/54.231.33.147] failed: Read timed out
……
Caused by: java.net.SocketTimeoutException: Read timed out
解決策、ゾーンの設定:
String regionName = "cn-north-1";
Region region = Region.getRegion(Regions.fromName(regionName));
s3client.setRegion(region);
String serviceEndpoint = region.getServiceEndpoint(ServiceAbbreviations.S3);
s3client.setEndpoint(serviceEndpoint);
s3client.putObject(new PutObjectRequest(bucketName, keyName, file));
4.ファイルのダウンロード
公式ドキュメントを参照してください.http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/GettingObjectsUsingAPIs.html http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/RetrievingObjectUsingJava.html GetObject.java
同じようにエリア設定のコードも加えれば、このdemoを走ることができます.
5.私のDemo
private AmazonS3 s3Client;
private String bucketName;
public S3Service(MyConfig myConfig) {
AWSCredentials credentials = new BasicAWSCredentials(
myConfig.AWS_ACCESS_KEY_ID, myConfig.AWS_SECRET_ACCESS_KEY);
s3Client = new AmazonS3Client(credentials);
String regionName = myConfig.AWS_REGION;
Region region = Region.getRegion(Regions.fromName(regionName));
s3Client.setRegion(region);
final String serviceEndpoint = region.getServiceEndpoint(ServiceAbbreviations.S3);
s3Client.setEndpoint(serviceEndpoint);
bucketName = myConfig.AWS_BUCKET_NAME;
}
public void upload(MultipartFile file, String keyName)
throws MyException {
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(file.getContentType());
metadata.setContentLength(file.getSize());
try {
s3Client.putObject(new PutObjectRequest(
bucketName, keyName, file.getInputStream(), metadata));
} catch (AmazonServiceException ase) {
logger.warn("Caught an AmazonServiceException, which " +
"means your request made it " +
"to Amazon S3, but was rejected with an error response" +
" for some reason.");
logger.warn(printAse(ase));
throw new MyException ("upload file failed",
MyExceptionType.AWS_UPLOAD_FAILED);
} catch (AmazonClientException ace) {
logger.warn("Caught an AmazonClientException, which " +
"means the client encountered " +
"an internal error while trying to " +
"communicate with S3, " +
"such as not being able to access the network.");
logger.warn("Error Message: " + ace.getMessage());
throw new MyException ("upload file failed",
MyExceptionType.AWS_UPLOAD_FAILED);
} catch (IOException ioe) {
logger.warn("Caught an IOException: " + ioe.getMessage());
throw new MyException ("upload file failed",
MyExceptionType.AWS_UPLOAD_FAILED);
}
}