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

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

相关文章推荐

AWS之S3实践

从S3的API上来看,S3的资源分为Bucket和Object 2种类型。Bucket是S3根对象(如果S3是根目录的话,那么Bucket就是根目录下的文件夹),所有位于Bucket下的资源都是Obj...
  • puncha
  • puncha
  • 2013-03-09 14:27
  • 7108

AWS S3 API实现文件上传下载

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

AWS S3 API实现文件上传下载(ASP.NET MVC)

近日项目需要使用AWS S3的API实现文件的上传和下载功能,发现网上很多都是Java版本的,.NET版本很少,其中遇到了几个小问题,在这里写一下方便以后大家开发。     1、首先加入配置,其中标...

AWS S3存储服务SDK

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

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

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

AWS3兼容青云对象存储操作类 JAVA单例模式

最近用到青云的对象存储,所以简单封装了一下。package com.tool.objectstoretool;import com.amazonaws.AmazonClientException; i...

ruby on rails爬坑(四):使用AWS S3存取数据

一,前言在上一篇博客ruby on rails爬坑(三):图片上传及显示中提到AWS S3,这篇博客将简单介绍如何在rails项目中使用AWS S3.二,步骤 在亚马逊云服务中心开通配置AWS S3服...

AWS S3的使用

这两天Web这边有一个功能需求,使用到了AWS 的S3服务,这个东西在国内访问很慢,所以,一般也少有人使用,我们的业务主要在美国,所以,使用这个服务还是非常好的。国内的阿里云做到了云计算的龙头,我还是...

aws s3 (1)

Path Argument Type 路径参数的类型 Whenever using a command, at least one path argument must be specified. ...

Aws Dynamodb数据导出到S3

本节将描述如何从一个或多个DynamoDB的表导出数据到S3的bucket中。
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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