m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

AWSのS3をMavenのパッケージを使用してアップロード、ダウンロードを実施

キーアクセスには

ファイルの場合と設定ファイルなどよりキーの値より取得する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();
    }
    
}