1. 程式人生 > >AWS的s3儲存的java實現-gradle構建環境

AWS的s3儲存的java實現-gradle構建環境

將開發工具包與 Gradle 一起使用,要在 Gradle 專案中使用適用於 Java 的 AWS 開發工具包,請使用 Spring 的適用於 Gradle 的依賴項管理外掛,使用該外掛,可以匯入開發工具包的 Maven 材料清單 (BOM) 以管理專案的開發工具包依賴項,配置適用於 Gradle 的開發工具包。


1.向 build.gradle 檔案中新增依賴項管理外掛

apply plugin: "io.spring.dependency-management"

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "io.spring.gradle:dependency-management-plugin:1.0.0.RC2"
    }
}
//將 BOM 新增到該檔案的 dependencyManagement 部分
dependencyManagement {
    imports {
        mavenBom 'com.amazonaws:aws-java-sdk-bom:1.11.161'
    }
}
//在依賴項部分中指定您將使用的開發工具包模組
dependencies {
    compile 'com.amazonaws:aws-java-sdk-s3'
}
Gradle 將自動使用 BOM 中的資訊來解析開發工具包依賴項的正確版本。

2.然後下面是java程式碼:

import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Iterator;
import java.util.List;

/**
 * SDK介面方法
 * Created by wangwl on 2017/7/13.
 */
public class S3SDKClientTest {

    public static void main(String[] args) {

    }

    /**
     * ##########################################
     *   bucket的操作
     * ##########################################
     */

    /**
     * 獲取bucket
     * @param bucket_name
     * @return
     */
    public static Bucket getBucket(String bucket_name) {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        Bucket named_bucket = null;
        List<Bucket> buckets = s3.listBuckets();
        for (Bucket b : buckets) {
            if (b.getName().equals(bucket_name)) {
                named_bucket = b;
            }
        }
        return named_bucket;
    }

    /**
     * 建立bucket
     * @param bucket_name
     * @return
     */
    public static Bucket createBucket(String bucket_name) {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        Bucket b = null;
        if (s3.doesBucketExist(bucket_name)) {
            System.out.format("Bucket %s already exists.\n", bucket_name);
            b = getBucket(bucket_name);
        } else {
            try {
                b = s3.createBucket(bucket_name);
            } catch (AmazonS3Exception e) {
                System.err.println(e.getErrorMessage());
            }
        }
        return b;
    }

    /**
     * 列出所有的buckets
     * @return
     */
    public static List<Bucket> listBuckets() {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        List<Bucket> buckets = s3.listBuckets();
        System.out.println("Your Amazon S3 buckets:");
        for (Bucket b2 : buckets) {
            System.out.println("* " + b2.getName());
        }
        return buckets;
    }

    /**
     * 刪除不受版本控制的儲存桶之前從中刪除物件.
     * 要在刪除不受版本控制的儲存桶之前從中刪除物件,
     * 可以使用 AmazonS3 客戶端的 listObjects 方法檢索物件列表,使用 deleteObject 刪除各個物件。
     * @param bucket_name
     */
    public static void deleteObjectsNoVersion(String bucket_name){
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        try {
            System.out.println(" - removing objects from bucket");
            //獲取該bucket下的所有物件
            ObjectListing object_listing = s3.listObjects(bucket_name);
            while (true) {
                for (Iterator<?> iterator = object_listing.getObjectSummaries().iterator(); iterator.hasNext();) {
                    S3ObjectSummary summary = (S3ObjectSummary)iterator.next();
                    s3.deleteObject(bucket_name, summary.getKey());
                }

                // more object_listing to retrieve?
                if (object_listing.isTruncated()) {
                    object_listing = s3.listNextBatchOfObjects(object_listing);
                } else {
                    break;
                }
            };
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }

    }

    /**
     * 刪除受版本控制的儲存桶之前從中刪除物件
     * 如果您使用受版本控制的儲存桶,還需要先刪除儲存桶中儲存的所有受版本控制物件,然後才能刪除儲存桶。
     * 使用在刪除儲存桶中物件時使用的相似方法,通過使用 AmazonS3 客戶端的 listVersions 方法列出所有受版本控制的物件,
     * 然後使用 deleteVersion 刪除各個物件。
     * @param bucket_name
     */
    public static void deleteObjectsVersion(String bucket_name) {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        try {
            System.out.println(" - removing objects from bucket");
            ObjectListing object_listing = s3.listObjects(bucket_name);
            while (true) {
                for (Iterator<?> iterator = object_listing.getObjectSummaries().iterator(); iterator.hasNext();) {
                    S3ObjectSummary summary = (S3ObjectSummary)iterator.next();
                    s3.deleteObject(bucket_name, summary.getKey());
                }

                // more object_listing to retrieve?
                if (object_listing.isTruncated()) {
                    object_listing = s3.listNextBatchOfObjects(object_listing);
                } else {
                    break;
                }
            };

            System.out.println(" - removing versions from bucket");
            VersionListing version_listing = s3.listVersions(
                new ListVersionsRequest().withBucketName(bucket_name));
            while (true) {
                for (Iterator<?> iterator = version_listing.getVersionSummaries().iterator(); iterator.hasNext();) {
                    S3VersionSummary vs = (S3VersionSummary)iterator.next();
                    s3.deleteVersion(bucket_name, vs.getKey(), vs.getVersionId());
                }

                if (version_listing.isTruncated()) {
                    version_listing = s3.listNextBatchOfVersions(version_listing);
                } else {
                    break;
                }
            }
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }
    }

    /**
     * 刪除一個空的bucket
     * @param bucket_name
     */
    public static void deleteEmptyBucket(String bucket_name) {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        try {
            s3.deleteBucket(bucket_name);
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }

    }

    /**
     * ##########################################
     *   object的操作
     * ##########################################
     */

    /**
     * 上傳物件到bucket
     * @param bucket_name
     * @param file_path 檔案物件路徑
     */
    public static void putObject(String bucket_name, String file_path) {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        String key_name = Paths.get(file_path).getFileName().toString();
        try {
            s3.putObject(bucket_name, key_name, new java.io.File(file_path));
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }
    }

    /**
     * 列出bucket裡的所有物件。
     * listObjects 方法返回一個 ObjectListing 物件,該物件提供有關儲存桶中物件的資訊。
     * @param bucket_name
     */
    public static void listObjects(String bucket_name) {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        ObjectListing ol = s3.listObjects(bucket_name);
        //使用 getObjectSummaries 方法獲取 S3ObjectSummary 物件的列表
        List<S3ObjectSummary> objects = ol.getObjectSummaries();
        for (S3ObjectSummary os: objects) {
            //呼叫其 getKey 方法以檢索物件名稱
            System.out.println("*物件名稱: " + os.getKey());
        }
    }

    /**
     * 下載物件
     * 使用 AmazonS3 客戶端的 getObject 方法,並向其傳遞要下載的儲存桶和物件的名稱。
     * 如果成功,此方法將返回一個 S3Object。指定的儲存桶和物件鍵必須存在,否則將出現錯誤。
     * @param bucket_name
     * @param key_name 物件的名稱
     */
    public static void getObject(String bucket_name, String key_name) {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        try {
            S3Object o = s3.getObject(bucket_name, key_name);
            //獲取物件的內容,返回一個 S3ObjectInputStream,其行為與標準 Java InputStream 物件的相同
            S3ObjectInputStream s3is = o.getObjectContent();
            //定義一個物件輸出的檔案
            FileOutputStream fos = new FileOutputStream(new File(key_name));
            byte[] read_buf = new byte[1024];
            int read_len = 0;
            while ((read_len = s3is.read(read_buf)) > 0) {
                fos.write(read_buf, 0, read_len);
            }
            s3is.close();
            fos.close();
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        } catch (FileNotFoundException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        } catch (IOException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }

    }

    /**
     * 複製物件(從一個bucket到另一個bucket)。
     * 您可以將 copyObject 與 deleteObject 配合使用來移動或重新命名物件,
     * 方式是先將物件複製到新名稱 (您可以使用與源和目標相同的儲存桶),然後從物件的舊位置刪除物件。
     * @param from_bucket
     * @param object_key 物件的名稱
     * @param to_bucket
     */
    public static void copyObject(String from_bucket, String object_key, String to_bucket) {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        try {
            s3.copyObject(from_bucket, object_key, to_bucket, object_key);
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }
    }

    /**
     * 刪除物件
     * @param bucket_name
     * @param object_key 物件的名稱
     */
    public static void deleteObject(String bucket_name, String object_key) {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        try {
            s3.deleteObject(bucket_name, object_key);
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }
    }

    /**
     * 批量刪除物件
     * @param bucket_name
     * @param object_keys 物件名稱的陣列
     */
    public static void deleteObjects(String bucket_name, String object_keys) {
        final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
        try {
            DeleteObjectsRequest dor = new DeleteObjectsRequest(bucket_name).withKeys(object_keys);
            s3.deleteObjects(dor);
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }
    }

}
參考Amazon web services官網:http://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/examples-s3-buckets.html

參考Amazon web services官網:http://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/examples-s3-buckets.html
參考Amazon web services官網:http://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/examples-s3-buckets.html