AmazonS3文档——对象存储的用法之《对象操作》
即上篇我们说了存储桶的相关操作后,这节则是重要的如何操作一个对象文件到我们建好的存储桶中呢?下面开始吧~
1.这里的对象指的是?
Amazon S3 对象表示一个文件 或一个数据集合。每个对象必须驻留在一个存储桶中。
2.上传对象
使用 AmazonS3 客户端的 putObject 方法,并为其提供存储桶名称、键名称和要上传的文件。存储桶必须存在,否则将出现错误。
导入:
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.AmazonServiceException;
1
2
3
代码:
//存储桶的名字
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);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
1
2
3
4
5
代码:
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());
}
}
1
2
3
4
5
6
7
8
9
10
11
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;
1
2
3
4
5
6
7
8
9
代码:
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);
}
}
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
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);
}
}
1
2
3
4
5
6
7
8
9
6.删除对象
使用 AmazonS3 客户端的 deleteObject 方法,并向其传递要删除的存储桶和对象的名称。指定的存储桶和对象键必须存在,否则将出现错误。
导入:
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.AmazonServiceException;
1
2
3
代码:
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);
}
}
1
2
3
4
5
6
7
8
9
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;
1
2
3
4
代码:
/**
*
* @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);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
1
2
3
4
5
6
代码:
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);
}
}
参考代码 https://blog.csdn.net/zhanglf02/article/details/78500015
————————————————
版权声明:本文为CSDN博主「万米高空」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhanglf02/article/details/78500015