关闭

AWS的s3存储的java实现-gradle构建环境

标签: Java的S3存储AWSSDK实现
252人阅读 评论(0) 收藏 举报
分类:

将开发工具包与 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

0
0

猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1232次
    • 积分:63
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:1篇
    • 译文:0篇
    • 评论:2条
    文章分类
    文章存档
    最新评论