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

原创 2017年07月13日 16:00:09

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

AmazonS3 使用 AWS SDK for Java

Amazon S3是一种云上的存储服务器,其功能仅在于存储。和普通的服务器不同,它没有操作界面,连一般的SSH命令登录功能都没有。和它打交道的话,一种办法是用它的管理界面,另一种是借助其编程接口。Am...

Gradle如何始终使用最新版本的依赖

By default, Gradle treats a module version (eg "myorg:myproj:1.0") as unchanging over time, allowing...

Amazon S3云存储服务器的功能及编程接口

Amazon S3是一种云上的存储服务器,其功能仅在于存储。和普通的服务器不同,它没有操作界面,连一般的SSH命令登录功能都没有。和它打交道的话,一种办法是用它的管理界面,另一种是借助其编程接口。 ...

AWS S3 API实现文件上传下载

近日项目需要使用AWS S3的API实现文件的上传和下载功能,才发现网上关于.net实现该功能的文章不多,有几篇也都是很老版本的AWS的使用描述了,写法和封装的类等等都基本上报废了。虽然这样,但还是很...

文件存储到amazon S3

由于云技术的日益成熟,越来越多的公司存储文件时会用到云技术,而亚马逊就提供了一个日益成熟的云环境的服务器群方便存储的文件,我就以简单存贮图片到amazon S3为例,简单调用了一下amazon提供的J...

在linux服务器上安装Gradle

Gradle是一种现在很流程的构建工具,目前基本和Maven平分天下,而且大有取而代之的趋势。这篇教程教大家怎么在linux上安装Gradle。 一、获得一台linux服务器 要在linu...

Java内存泄露的理解与解决

Java内存管理机制 在C++ 语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期。从申请分配、到使用、再到最后的释放。这样的过程非常灵活,但是却十分繁琐,程序员很容...

AWS S3存储服务SDK

0x0 前言 Amazon Simple Storage Service 是互联网存储解决方案。该服务旨在降低开发人员进行网络规模级计算的难度。 Amazon S3 提供了一个简单 We...

亚马逊简单云存储服务(AWS S3)

简介(官方语言) AWS(Amazon Web Services):以 Web 服务的形式向企业提供 IT 基础设施服务,现在通常称为云计算。云计算的主要优势之一是能够以根据业务发展来扩展的 ...
  • AlanLzz
  • AlanLzz
  • 2017年05月25日 15:22
  • 1160

AWS S3 Java 开发文档

  • 2017年11月10日 10:18
  • 596KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AWS的s3存储的java实现-gradle构建环境
举报原因:
原因补充:

(最多只允许输入30个字)