AmazonS3文档——对象存储的用法之《对象操作》

来源:互联网 发布:高端化妆品知乎 编辑:程序博客网 时间:2024/06/18 11:35

即上篇我们说了存储桶的相关操作后,这节则是重要的如何操作一个对象文件到我们建好的存储桶中呢?下面开始吧~

1.这里的对象指的是?

Amazon S3 对象表示一个文件 或一个数据集合。每个对象必须驻留在一个存储桶中。

2.上传对象

使用 AmazonS3 客户端的 putObject 方法,并为其提供存储桶名称、键名称和要上传的文件。存储桶必须存在,否则将出现错误。
导入:

import com.amazonaws.services.s3.AmazonS3;import com.amazonaws.services.s3.AmazonS3Client;import com.amazonaws.AmazonServiceException;

代码:

//存储桶的名字    private String bucket_name="beijing";    //自定义上传到bucket后的目录结构    private String key_name="beijing/haidingqu/xierqi/yuanzougaofei.mp3";    //本地文件路径    private String file_path="E:/music/china/yuanzougaofei.mp3";    /**     * 上传文件到指定的bucket中。     * 注意点:这里的本地路径的文件必须存在才行,不然文件不存在回异常。     */    public void uploadObj(){        final AmazonS3 s3 = new AmazonS3Client();        try {            s3.putObject(bucket_name, key_name, file_path);        } catch (AmazonServiceException e) {            System.err.println(e.getErrorMessage());            System.exit(1);        }    }

3.列出所有bucket中的对象

要获取存储桶中的对象列表,我们使用 AmazonS3 客户端的 listObjects 方法,并为其提供存储桶名称。
listObjects 方法返回一个 ObjectListing 对象,该对象提供有关存储桶中对象的信息。要列出对象名称 (键),可使用 getObjectSummaries 方法获取 S3ObjectSummary 对象的列表,其中每个对象均表示存储桶中的一个对象,然后调用其 getKey 方法以检索对象名称。
导入:

import com.amazonaws.services.s3.AmazonS3;import com.amazonaws.services.s3.AmazonS3Client;import com.amazonaws.services.s3.model.ObjectListing;import com.amazonaws.services.s3.model.S3ObjectSummary;import java.util.List;

代码:

public void showListObjFromBucket(String bucketName){        final AmazonS3 s3 = new AmazonS3Client();        ObjectListing ol = s3.listObjects(bucketName);        List<S3ObjectSummary> objects = ol.getObjectSummaries();        for (S3ObjectSummary os: objects) {            System.out.println("* " + os.getKey());        }    }

4.下载对象

使用 AmazonS3 客户端的 getObject 方法,并向其传递要下载的存储桶和对象的名称。如果成功,此方法将返回一个 S3Object。指定的存储桶和对象键必须存在,否则将出现错误。
您可以通过对 S3Object 调用 getObjectContent 来获取对象的内容。这将返回一个 S3ObjectInputStream,其行为与标准 Java InputStream 对象的相同。

以下示例从 S3 下载一个对象,然后将该对象的内容保存到一个文件(路径为file_path)
导入:

import com.amazonaws.AmazonServiceException;import com.amazonaws.services.s3.AmazonS3;import com.amazonaws.services.s3.AmazonS3Client;import com.amazonaws.services.s3.model.S3Object;import com.amazonaws.services.s3.model.S3ObjectInputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;

代码:

public void downloadObjByKey(String buketName,String key){        final AmazonS3 s3 = new AmazonS3Client();        try {            S3Object o = s3.getObject(buketName, key);            S3ObjectInputStream s3is = o.getObjectContent();            //下载到指定路径file_path下            FileOutputStream fos = new FileOutputStream(new File(file_path));            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);        }    }

5.复制、移动或重命名对象

您可以使用 AmazonS3 客户端的 copyObject 方法将对象从一个存储桶复制到另一个存储桶。它采用要从中复制的存储桶的名称、要复制的对象以及目标存储桶和名称。
导入:

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.AmazonServiceException;

代码:

public void moveOrCopyObj(String from_bucket,String object_key,String to_bucket,String object_ke){        final AmazonS3 s3 = new AmazonS3Client();        try {            s3.copyObject(from_bucket, object_key, to_bucket, object_key);        } catch (AmazonServiceException e) {            System.err.println(e.getErrorMessage());            System.exit(1);        }    }

6.删除对象

使用 AmazonS3 客户端的 deleteObject 方法,并向其传递要删除的存储桶和对象的名称。指定的存储桶和对象键必须存在,否则将出现错误。
导入:

import com.amazonaws.services.s3.AmazonS3;import com.amazonaws.services.s3.AmazonS3Client;import com.amazonaws.AmazonServiceException;

代码:

public void deleteObject(String bucket_name, String object_key) {        final AmazonS3 s3 = new AmazonS3Client();        try {            s3.deleteObject(bucket_name, object_key);        } catch (AmazonServiceException e) {            System.err.println(e.getErrorMessage());            System.exit(1);        }    }

7.一次性删除指定多个对象

利用 AmazonS3 客户端的 deleteObjects 方法,您可以从同一存储桶中删除多个对象,方式是将这些对象的名称传递到 DeleteObjectRequest withKeys 方法。
导入:

import com.amazonaws.AmazonServiceException;import com.amazonaws.services.s3.AmazonS3;import com.amazonaws.services.s3.AmazonS3Client;import com.amazonaws.services.s3.model.DeleteObjectsRequest;

代码:

/***  * @param bucket_name * @param object_keys  要删除的obj所在的目录集合 */public void  deleteObjects(String bucket_name,String[] object_keys){        final AmazonS3 s3 = new AmazonS3Client();        try {            DeleteObjectsRequest dor = new DeleteObjectsRequest(bucket_name)                .withKeys(object_keys);            s3.deleteObjects(dor);        } catch (AmazonServiceException e) {            System.err.println(e.getErrorMessage());            System.exit(1);        }    }

8.删除bucket下的所有文件

利用 AmazonS3 客户端的 deleteObject 方法,您可以从同一存储桶中删除所有对象,方式是通过查询全部文件,并在遍历里面将这些对象key传递到 deleteObject方法。
导入:

import com.amazonaws.services.s3.AmazonS3;import com.amazonaws.services.s3.AmazonS3Client;import com.amazonaws.AmazonServiceException;import com.amazonaws.services.s3.model.ObjectListing;import com.amazonaws.services.s3.model.S3ObjectSummary;import java.util.List;

代码:

    public void deleteAllObjects(String bucketName) {        final AmazonS3 s3 = new AmazonS3Client();        ObjectListing ol = s3.listObjects(bucketName);        List<S3ObjectSummary> objects = ol.getObjectSummaries();        for (S3ObjectSummary os : objects) {            String key = os.getKey();            s3.deleteObject(bucketName, key);        }    }