简介
aws云存储和obs,oss类似用于简单对象存储的一种,主要也包括几个概念bucket region ak sk等 以下是sdk1.x的部分使用
创建客户端 常用的 withXXX 方法会返回 builder 对象,由此可以将方法调用组合起来,这样不仅方便而且代码更加便于阅读。在配置需要的属性后,可以调用 build 方法创建客户端。创建的客户端不可更改,而且对 setRegion 或 setEndpoint 的所有调用都会失败。
AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.withRegion(regions)
.build();
操作桶资源 Amazon S3 中的每个对象(文件)必须放入存储桶,它代表对象的集合(容器)。每个存储桶使用必须唯一的键 (名称) 命名
1.创建存储桶 使用 AmazonS3 客户端的createBucket方法。会返回新的存储桶。如果存储桶已存在,createBucket 方法将引发异常。
if (s3.doesBucketExistV2(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;
2.列出存储桶 使用 AmazonS3 客户端的listBucket方法。如果成功,会返回存储桶的列表。
List buckets = s3.listBuckets();
System.out.println(“Your {S3} buckets are:”);
for (Bucket b : buckets) {
System.out.println(“* " + b.getName());
}List buckets = s3.listBuckets();
System.out.println(“Your {S3} buckets are:”);
for (Bucket b : buckets) {
System.out.println(”* " + b.getName());
}
3.删除存储桶 在删除 Amazon S3 存储桶前,必须先确保存储桶为空,否则会导致错误。如果您的存储桶受版本控制,则必须同时删除与该存储桶关联的所有受版本控制对象。
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(" OK, bucket ready to delete!");
s3.deleteBucket(bucket_name);
操作对象资源
1.上传对象 使用 AmazonS3 客户端putObject方法,并提供存储桶名称、键名称和要上传的文件。存储桶必须存在,否则将出现错误。
s3.putObject(bucket_name, key_name, new File(file_path));
2.列出对象 使用 AmazonS3 客户端listObjects方法,并提供存储桶的名称。
ListObjectsV2Result result = s3.listObjectsV2(bucket_name);
List objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
System.out.println("* " + os.getKey());
}
3.查询对象 使用 AmazonS3 客户端getObject方法
S3Object o = s3.getObject(bucket_name, key_name);
4.下载对象 通过对 getObjectContent 调用 S3Object 来获取对象的内容。这将返回一个 S3ObjectInputStream,其行为与标准 Java InputStream 对象的相同。
S3Object o = s3.getObject(bucket_name, key_name);
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();
5.删除对象 使用 AmazonS3 客户端deleteObject方法,并向其传递要删除的存储桶和对象的名称。指定的存储桶和对象键必须存在,否则将出现错误。
s3.deleteObject(bucket_name, object_key);
5.批量删除 使用 AmazonS3 客户端deleteObjects方式是将这些对象的名称传递过去可以从同一存储桶中删除多个对象
DeleteObjectsRequest dor = new DeleteObjectsRequest(bucket_name)
.withKeys(object_keys);
s3.deleteObjects(dor);