AmazonS3文档——对象存储的用法之《存储桶操作》
最近应业务需要,要把保单相关的电话录音进行整理,并逐渐取缔本地硬盘存储的方式,改为AmazonS3云存储。一方面让录音文件的目录结构变得更加统一,有利于维护和查询;另一方面可以保证录音信息不会丢失。当然关于亚马逊的这个对象存储是花钱的服务,这点决定了接触的人不会太多吧。这里记录一下以后备用。
1.内容参考官方文档
查看地址:AWS Java 开发人员指南
2.项目环境
自从用了maven,就没再回去用过web项目和java项目。。。,就因为导包方便。当然如果只是想操作本地文件到云存储上的话,不用任何配置,普通的java代码即可完成。这些上传,下载,查询,删除的方法都可以作为工具类直接放到任何应用里面就可以使用。maven3.3.3+jdk1.7
3.安装 Java 开发环境
适用于 Java 的 AWS 开发工具包要求使用 J2SE Development Kit 6.0 或更高版本。可以从 http://www.oracle.com/technetwork/java/javase/downloads/ 下载最新的 Java 软件。
4.重要提示
Java 版本 1.6 (JS2E 6.0) 中没有 SHA256 签名的 SSL 证书的内置支持,而在 2015 年 9 月 30 日以后,与 AWS 的所有 HTTPS 连接都需要该功能。
Java 版本 1.7 或更高版本包含已更新证书,不受这一问题的影响。
5.存储桶的创建须知
5.1 每个 AWS 账户创建最多 100 个存储桶。创建存储桶时,需提供桶的名称以及要在其中创建存储桶的 AWS 区域(Region)。
5.2存储在存储桶中的对象无数量限制,且无论是使用很多存储桶,还是仅使用少量存储桶,性能方面都不会有差别。可以在单个存储桶中存储所有对象,也可以在多个存储桶中组织它们。
6.创建、列出和删除存储桶
Amazon S3 中的每个对象 (文件) 必须放入存储桶,它代表对象的集合 (容器)。每个存储桶使用必须唯一的键 (名称) 命名。
6.1 创建存储桶
使用 AmazonS3 客户端的 createBucket 方法。会返回新的存储桶。
导入:
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.AmazonServiceException;
1
2
3
4
代码:
/**
* 创建名为bucketName的存储桶。
* @param bucketName
*/
public void createOneBucket(String bucketName){
final AmazonS3 s3 = new AmazonS3Client();
try {
Bucket b = s3.createBucket(bucketName);
} catch (AmazonServiceException e) {
System.err.println(e.getErrorMessage());
System.exit(1);
}
System.out.println("Done!");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
6.2列出存储桶
使用 AmazonS3 客户端的 listBucket 方法。如果成功,会返回存储桶对象的列表。
导入:
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.Bucket;
import java.util.List;
1
2
3
4
5
代码:
/**
* 展示所有的存储桶
*/
public void showBucketList(){
final AmazonS3 s3 = new AmazonS3Client();
List<Bucket> buckets = s3.listBuckets();
System.out.println("Your Amazon S3 buckets:");
for (Bucket b : buckets) {
System.out.println("* " + b.getName());
}
}
1
2
3
4
5
6
7
8
9
10
11
6.3删除存储桶
在删除 Amazon S3 存储桶前,必须先确保存储桶为空,否则会导致错误。如果您的存储桶受版本控制,则必须同时删除与该存储桶关联的所有受版本控制对象。一般平时不会用这个,具体完整示例请看样例:这里
简单的操作如下简介
导入:
import com.amazonaws.AmazonServiceException;
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.Iterator;
1
2
3
4
5
6
代码:
/**
* 根据桶的名字删除该桶:具体思路是先删除bucketName中的文件,然后删除BucketName
* @param bucketName
*/
public void deleteBucketByName(String bucketName){
final AmazonS3 s3 = new AmazonS3Client();
try {
System.out.println(" - removing objects from bucket");
ObjectListing object_listing = s3.listObjects(bucketName);
while (true) {
for (Iterator<?> iterator =
object_listing.getObjectSummaries().iterator();
iterator.hasNext();) {
S3ObjectSummary summary = (S3ObjectSummary)iterator.next();
s3.deleteObject(bucketName, 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);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
6.4 删除受版本控制的存储桶之前从中删除对象
思路:如果您使用受版本控制的存储桶,还需要先删除存储桶中存储的所有受版本控制对象,然后才能删除存储桶。
使用在删除存储桶中对象时使用的相似方法,通过使用 AmazonS3 客户端的 listVersions 方法列出所有受版本控制的对象,然后使用 deleteVersion 删除各个对象。
导入:
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.ListVersionsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.amazonaws.services.s3.model.S3VersionSummary;
import com.amazonaws.services.s3.model.VersionListing;
import java.util.Iterator;
1
2
3
4
5
6
7
8
9
代码:
public void deleteBucketVisionList(String bucket_name){
final AmazonS3 s3 = new AmazonS3Client();
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);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
6.6 删除空存储桶
思路:在删除存储桶中的对象 (包括所有受版本控制的对象) 后,就可以使用 AmazonS3 客户端的 deleteBucket 方法删除存储桶本身。
导入:
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
1
2
3
代码:
public void deleteEmptyBucket(String bucket_name){
final AmazonS3 s3 = new AmazonS3Client();
try {
s3.deleteBucket(bucket_name);
} catch (AmazonServiceException e) {
System.err.println(e.getErrorMessage());
System.exit(1);
}
}
————————————————
版权声明:本文为CSDN博主「万米高空」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhanglf02/article/details/78485809