S3-Java-SDK

推荐使用AWS S3官方的Java SDK

前置条件

  • JDK 7或更高版本,Maven 3或更高版本;
  • 如果您还不了解COS,请参考华云对象存储服务
  • 使用SDK需要拥有有效的密钥对(包括AccessKeyId和AccessKeySecret)进行签名认证,请在控制台界面获取该密钥对;

pom.xml

通过Maven导入所有需要依赖的jar包,pom.xml配置如下

<dependencies>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-s3</artifactId>
        <version>1.11.132</version>
    </dependency>
<dependencies>

建议使用示例版本,最新版本可参考链接,调用相关API,即可访问Amazon S3或其他兼容S3的存储服务

适用系统

Mac OS X,Windows,Linux等

使用S3-Java-SDK

以下代码使用SDK实现了基本的桶和对象操作:

  • 创建一个桶;
  • 获取用户桶列表;
  • 上传对象到桶中;
  • 下载桶中的对象;
  • 获取桶中的对象列表;
  • 从桶中删除对象;
  • 删除一个空桶;
package com.chinac.stor;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.UUID;

import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;

public class S3SDKSample {

    public static void main(String[] args) throws IOException {

    ClientConfiguration config = new ClientConfiguration();

    // SDK默认走HTTPS协议,这里设置为走HTTP
    config.withProtocol(Protocol.HTTP);

    // SDK默认v4签名,打开此项使用v2签名
    config.setSignerOverride("S3SignerType"); 

    // 设置密钥对,创建Credential对象
    final String accessKeyId = "YOUR_ACCESS_KEY_ID";
    final String secretAccessKey = "YOU_SECRET_ACCESS_KEY";
    AWSCredentials credentials = new BasicAWSCredentials(accessKeyId, secretAccessKey);

    // 创建S3访问客户端
    AmazonS3 s3 = new AmazonS3Client(credentials, config);
    s3.setEndpoint("s3-cn-suzhou.chinac.com"); // 从用户信息页面描述中获取endpoint

    final String bucketName = "test-bucket-" + UUID.randomUUID();
    final String key = "test-key";

    try {
        // 创建一个桶
        s3.createBucket(bucketName);

        // 获取桶列表
        for (Bucket bucket : s3.listBuckets()) {
            System.out.println("Bucket:" + bucket.getName());
        }

        // 上传对象到桶中
        s3.putObject(new PutObjectRequest(bucketName, key, createFile()));

        // 下载刚刚上传的对象
        S3Object object = s3.getObject(new GetObjectRequest(bucketName, key));
        dumpInputStream(object.getObjectContent());

        // 获取桶中的对象列表
        ObjectListing objectListing = s3.listObjects(new ListObjectsRequest().withBucketName(bucketName));

        for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
            System.out.println(objectSummary.getKey() +"Size:" + objectSummary.getSize());
        }

        // 从桶中删除对象
        s3.deleteObject(bucketName, key);

        // 删除一个空桶
        s3.deleteBucket(bucketName);
     } catch (AmazonServiceException ase) {
        System.out.println(ase.getMessage());
        System.out.println(ase.getStatusCode());
     } catch (AmazonClientException ace) {
         System.out.println(ace.getMessage());
     }
 }

    // 创建文件并返回该对象
    private static File createFile() throws IOException {
         File file = File.createTempFile("storultra_test", ".txt");
         file.deleteOnExit();
         Writer writer = new OutputStreamWriter(new FileOutputStream(file));
         writer.write("Hello, world!\n");
         writer.close();
         return file;
    }

    // 输出InputStream流
    private static void dumpInputStream(InputStream input) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        while (true) {
            String line = reader.readLine();
            if (line == null) break;
                System.out.println(line);
        }
    }
}

Eclipse下执行代码

  • 在Eclipse下New->Maven Project;
  • New一个名为S3SDKSample的类;
  • 拷贝上述代码并保存到S3SDKSample.java文件中;
  • 右键Run As->Java Application,执行结果输出到控制台。

results matching ""

    No results matching ""