Amazon S3文件上傳下載(springboot)

pom依賴

		<dependency>
			<groupId>com.amazonaws</groupId>
			<artifactId>aws-java-sdk-s3</artifactId>
			<version>1.11.743</version>
		</dependency>
		<dependency>
			<groupId>com.amazonaws</groupId>
			<artifactId>aws-java-sdk-core</artifactId>
			<version>1.11.743</version>
		</dependency> 

awss3_contents.properties

accessKeyId,secretKey申請aws賬號時給定的,這裏以xxx代替。

## Amazon S3 Build設定用 ##
## AWSAccessKeyId ##
accessKeyId=xxx
## AWSSecretKey ##
secretKey=xxx
## AWSS3のバケット名 ##
bucketName=testbucket
## AWSS3のフォルダ名 ##
folderName=test1

AwsS3Contents   AWSS3設定用文言 綁定properties值

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import lombok.Getter;
import lombok.Setter;

/**
 * クラス名:AwsS3Contents <br>
 * 機能概要:AWSS3設定用文言 <br>
 *
 * @version 1.0
 */
@Component
@PropertySource(value = "classpath:awss3_contents.properties", encoding = "UTF-8")
@Setter
@Getter
public class AwsS3Contents {

    /** AWSAccessKeyId */
    @Value("${accessKeyId}")
    private String accessKeyId;

    /** AWSSecretKey */
    @Value("${secretKey}")
    private String secretKey;

    /** AWSS3のバケット名 */
    @Value("${bucketName}")
    private String bucketName;

    /** AWSS3のフォルダ名 */
    @Value("${folderName}")
    private String folderName;

}

AmazonS3Util 文件上傳下載

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartFile;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.amazonaws.util.IOUtils;

/**
 * Amazon S3へファイルの格納
 *
 * @author
 */
@Configuration
public class AmazonS3Util {

    /** AWSS3設定用文言 */
    @Autowired
    private AwsS3Contents awsS3Contents;

    public final String SEPARATOR = "/";

    /**
     * クライアントをビルド
     * 
     * @return client
     */
    private AmazonS3 loadClient() {

        // AWS資格の生成
        BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsS3Contents.getAccessKeyId(), awsS3Contents.getSecretKey());
        AWSStaticCredentialsProvider initialCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);

        // S3アクセスクライアントの生成
        AmazonS3 client = AmazonS3ClientBuilder.standard().withCredentials(initialCredentialsProvider)
            // TODO 日本方のサーバRegionsに修正用
            .withRegion(Regions.AP_SOUTH_1).build();

        return client;

    }

    /**
     * S3サーバー上の指定したフォルダ直下のファイルの一覧を取得
     *
     * @param bucketName
     *                       <br>
     * @param folderName
     *                       <br>
     * @return S3ObjectSummaryリスト <br>
     * @throws Exception
     *                       <br>
     */
    public List<S3ObjectSummary> getFileList(String bucketName, String folderName) throws Exception {

        // AmazonS3Clientインスタンスを作成
        AmazonS3 client = loadClient();

        final ListObjectsRequest listRequest = new ListObjectsRequest(bucketName, folderName + SEPARATOR, null, SEPARATOR, null);

        // S3ObjectSummaryリストを取得
        ObjectListing objectList = client.listObjects(listRequest);
        List<S3ObjectSummary> list = objectList.getObjectSummaries();
        if (list != null && list.size() > 0) {
            return list;
        }
        return null;
    }

    /**
     * S3サーバー上の指定したフォルダ直下のファイル名の一覧を取得
     *
     * @param bucketName
     *                       バケット名
     * @param folderName
     *                       フォルダ名
     * @return フォルダ直下のファイル名の一覧 Stringリスト
     */
    public List<String> getFileNameList(String bucketName, String folderName) throws Exception {

        List<String> fileNameList = new ArrayList<String>();
        // S3サーバー上の指定したフォルダ直下のファイルの一覧を取得
        List<S3ObjectSummary> s3ObjectList = getFileList(bucketName, folderName);
        for (S3ObjectSummary s3Object : s3ObjectList) {
            // オブジェクトキーを取得
            String key = s3Object.getKey();
            if (key != null) {
                // フォルダ名の後の部分だけ切り出す
                String fileName = key.substring(key.indexOf(folderName + SEPARATOR) + (folderName + SEPARATOR).length());
                fileNameList.add(fileName);
            }
        }

        if (fileNameList != null && fileNameList.size() > 0) {
            return fileNameList;
        }
        return null;
    }

    /**
     * ファイルパスとファイル名によりS3サーバーにファイルをアップロード
     *
     * @param bucketName
     *                          バケット名
     * @param folderName
     *                          フォルダ名
     * @param localFilePath
     *                          ローカルファイルパス
     * @param fileName
     *                          ファイル名
     */
    public void uploadFileByName(String bucketName, String folderName, String localFilePath, String fileName) {

        // AmazonS3Clientインスタンスを作成
        AmazonS3 client = loadClient();

        FileInputStream fis = null;
        try {
            File file = new File(localFilePath + SEPARATOR + fileName);

            fis = new FileInputStream(localFilePath + SEPARATOR + fileName);

            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentLength(file.length());

            final PutObjectRequest putRequest = new PutObjectRequest(bucketName, folderName + SEPARATOR + fileName, fis, objectMetadata);

            // アップロード
            client.putObject(putRequest);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * ファイルにより、S3サーバーにファイルをアップロード
     *
     * @param bucketName
     *                       バケット名
     * @param folderName
     *                       フォルダ名
     * @param file
     *                       ファイル名
     */
    public void uploadFileByFile(String bucketName, String folderName, MultipartFile file) {

        // AmazonS3Clientインスタンスを作成
        AmazonS3 client = loadClient();
        try {
            // ファイル名
            String originalFileName = file.getOriginalFilename();
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentType(file.getContentType());
            objectMetadata.setContentLength(file.getSize());
            // アップロード
            client.putObject(bucketName, folderName + SEPARATOR + originalFileName, file.getInputStream(), objectMetadata);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * S3サーバーからファイルをダウンロード
     *
     * @param bucketName
     *                          バケット名
     * @param folderName
     *                          フォルダ名
     * @param localFilePath
     *                          ダウンロード先のフルパス
     * @param fileName
     *                          ファイル名
     */
    public void getObjectFile(String bucketName, String folderName, String localFilePath, String fileName) {

        // AmazonS3Clientインスタンスを作成
        AmazonS3 client = loadClient();

        FileOutputStream fos = null;
        try {
            GetObjectRequest request = new GetObjectRequest(bucketName, folderName + SEPARATOR + fileName);

            S3Object object = client.getObject(request);

            if (object != null) {
                fos = new FileOutputStream(new File(localFilePath + SEPARATOR + fileName));
                IOUtils.copy(object.getObjectContent(), fos);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

調用util

amazonS3Util.uploadFileByName(awsS3Contents.getBucketName(), awsS3Contents.getFolderName(),
                            erroPathTemp, fileNameAddTimeTxt);
amazonS3Util.getObjectFile(awsS3Contents.getBucketName(), awsS3Contents.getFolderName(), erfilePat, erfileNam);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章