對物件執行Amazon S3作業 - AWS SDK for Java 1.x

截至 2024 年 7 月 31 日, AWS SDK for Java 1.x 已進入維護模式,且將於 2025 年 12 月 31 日end-of-support。我們建議您遷移至 AWS SDK for Java 2.x,以繼續接收新功能、可用性改善和安全性更新。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

對物件執行Amazon S3作業

一個Amazon S3對象表示一個件或數據的集合。每個物件都必須位於值區內。

注意

這些程式碼範例假設您瞭解使用中的資料,AWS SDK for Java並且已使用設定認AWS證和開發區域中的資訊來設定預設AWS認證

上傳物件

使用 AmazonS3 客戶端的putObject方法,提供存儲桶名稱,密鑰名稱和要上傳的文件。儲存貯體必須存在,否則會有錯誤結果

匯入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;

Code

System.out.format("Uploading %s to S3 bucket %s...\n", file_path, bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { s3.putObject(bucket_name, key_name, new File(file_path)); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

請參閱(詳見)的完整實例GitHub。

列出物件

要獲取存儲桶中的對象列表,請使用 AmazonS3 客戶端的listObjects方法,提供存儲桶的名稱。

此方listObjects法會傳ObjectListing回提供值區中物件相關資訊的物件。若要列出物件名稱 (key),請使用方getObjectSummaries法取得 S3 ObjectSummary 物件的清單,每個物件都代表儲存貯體中的單一物件。然後調用其getKey方法來檢索對象的名稱。

匯入

import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListObjectsV2Result; import com.amazonaws.services.s3.model.S3ObjectSummary;

Code

System.out.format("Objects in S3 bucket %s:\n", bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); ListObjectsV2Result result = s3.listObjectsV2(bucket_name); List<S3ObjectSummary> objects = result.getObjectSummaries(); for (S3ObjectSummary os : objects) { System.out.println("* " + os.getKey()); }

請參閱(詳見)的完整實例GitHub。

下載物件

使用 AmazonS3 客戶端的getObject方法,將要下載的存儲桶和對象的名稱傳遞給它。如果成功,該方法返回一個 S3 對象。指定的儲存貯體和物件金鑰必須存在,否則會有錯誤結果

您可以透過呼叫getObjectContent來取得物件的內容S3Object。這將返回一個 S3 ObjectInputStream,表現為一個標準的 Java InputStream 對象。

下列範例會從 S3 下載物件,並將其內容儲存至檔案 (使用與物件金鑰相同的名稱)。

匯入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.S3Object; import com.amazonaws.services.s3.model.S3ObjectInputStream; import java.io.File;

Code

System.out.format("Downloading %s from S3 bucket %s...\n", key_name, bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { 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(); } 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); }

請參閱(詳見)的完整實例GitHub。

複製、移動或重新命名物件

您可以使用儲存貯體複製物件到另一個儲存貯體到另一個儲存貯體到另一個儲存貯體到另一個 copyObject 它會取得要複製來源的值區名稱、要複製的物件,以及目的地值區名稱。

匯入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions;

Code

try { s3.copyObject(from_bucket, object_key, to_bucket, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } System.out.println("Done!");

請參閱(詳見)的完整實例GitHub。

注意

您可以搭copyObjectdeleteObject移動重新命名物件,方法是先將物件複製到新名稱 (您可以使用與來源和目的地相同的值區),然後從舊位置刪除物件。

刪除物件

使用 AmazonS3 客戶端的deleteObject方法,將要刪除的存儲桶和對象的名稱傳遞給它。指定的儲存貯體和物件金鑰必須存在,否則會有錯誤結果

匯入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions;

Code

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { s3.deleteObject(bucket_name, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

請參閱(詳見)的完整實例GitHub。

一次刪除多個物件

使用亞馬遜 S3 客戶端的deleteObjects方法,您可以通過將多個對象的名稱傳遞給鏈接來刪除同一存儲桶中的多個對象:sdk-for-java/v1/ 引用/COM /Amazonaws/服務/s3/模型/ DeleteObjectsRequest .html 方法。

匯入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;

Code

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { DeleteObjectsRequest dor = new DeleteObjectsRequest(bucket_name) .withKeys(object_keys); s3.deleteObjects(dor); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

請參閱(詳見)的完整實例GitHub。