1. 程式人生 > 其它 >AmazonS3文件——物件儲存的用法之《物件操作》

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