キーアクセスには
ファイルの場合と設定ファイルなどよりキーの値より取得する2パターンがある
別途定数などに入れて扱いたいのでちょっと別の方法をやる
BasicAWSCredentials
パラメータに直接キーとシークレットキーを指定するのでキーの元がわかりやすい
pom.xml
<dependencies> <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk --> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.11.76</version> </dependency> </dependencies>
アップロードサンプル
Sample01.java
package com.example.awssample; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.UUID; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerConfiguration; public class Sample01 { // アクセスキー private static final String ACCESS_KEY = "アクセスキーの文字列"; // シークレットアクセスキー private static final String SECRET_ACCESS_KEY = "シークレットアクセスキーの文字列"; // 分割サイズ private static final long PART_SIZE = 5 * 1024L * 1024L; public static void main(String[] args) throws IOException { byte[] b; // ファイルを読み込み File file = new File("画像ファイパス/sample1.jpg"); InputStream inputStream = new FileInputStream(file); ByteArrayOutputStream bout = new ByteArrayOutputStream(); int data; while ((data = inputStream.read()) != -1) { bout.write(data); } b = bout.toByteArray(); // 長さ long contentLength = b.length; // 設定情報 BasicAWSCredentials credentials; credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_ACCESS_KEY); // AWSのクライアント取得 AmazonS3 s3 = new AmazonS3Client(credentials); // バケット名 String bucketName = "awsuploadsample"; // アップロードキー名 String key = UUID.randomUUID().toString(); // パスを指定することで指定の場所へ配置できる String objectPath = "sample1/" + key; // TransferManagerを利用 TransferManager manager = new TransferManager(s3); // 分割サイズを設定 TransferManagerConfiguration c = new TransferManagerConfiguration(); c.setMinimumUploadPartSize(PART_SIZE); manager.setConfiguration(c); // メタデータに分割したデータのサイズを指定 ObjectMetadata putMetaData = new ObjectMetadata(); putMetaData.setContentLength(contentLength); // upload PutObjectRequest object = new PutObjectRequest(bucketName, objectPath, new ByteArrayInputStream(b), putMetaData); s3.putObject(object); } }
ダウンロードサンプル
Sample02.java
package com.example.awssample; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.GetObjectRequest; import com.amazonaws.services.s3.model.S3Object; public class Sample02 { // アクセスキー private static final String ACCESS_KEY = "アクセスキーの文字列"; // シークレットアクセスキー private static final String SECRET_ACCESS_KEY = "シークレットアクセスキーの文字列"; // 分割サイズ private static final long PART_SIZE = 5 * 1024L * 1024L; public static void main(String[] args) throws IOException { // 設定情報 BasicAWSCredentials credentials; credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_ACCESS_KEY); // AWSのクライアント取得 AmazonS3 s3 = new AmazonS3Client(credentials); // バケット名 String bucketName = "awsuploadsample"; // ダウンロードキー名 String key = "41dbccd0-c33b-44f1-9635-37a73f42b3e7"; // パスを指定することで指定の場所へ配置できる String objectPath = "sample1/" + key; // リクエストを取得 GetObjectRequest request = new GetObjectRequest(bucketName, objectPath); // objectを取得 S3Object object = s3.getObject(request); // データ取得 InputStream is = object.getObjectContent(); FileOutputStream fos = new FileOutputStream("/Users/matsumotoshigeharu/Documents/sample2.jpg"); // ファイル出力 byte[] buffer = new byte[5 * 1024 * 1024]; int readSize = -1; while( (readSize = is.read(buffer, 0, buffer.length)) != -1) { fos.write(buffer, 0, readSize); } fos.flush(); } }