自 2024 年 7 月 31 日起, 適用於 Java 的 AWS SDK 1.x 已進入維護模式,將於 2025 年 12 月 31 日end-of-support
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon S3 物件上執行操作
Amazon S3 物件代表檔案或資料集合。每個物件都必須位於儲存貯體中。
注意
這些程式碼範例假設您了解使用 中的資料, 適用於 Java 的 AWS SDK並使用設定 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 物件,提供儲存貯體中物件的相關資訊。若要列出物件名稱 (金鑰),請使用 getObjectSummaries
方法取得 S3ObjectSummary 物件清單,每個物件都代表儲存貯體中的單一物件。然後呼叫其 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
方法,將要下載的儲存貯體和物件的名稱傳遞給用戶端。如果成功, 方法會傳回 S3Object。指定的儲存貯體和物件金鑰必須存在,否則會產生錯誤。
您可以在 getObjectContent
上呼叫 ,以取得物件的內容S3Object
。這會傳回做為標準 Java InputStream
物件的 S3ObjectInputStream。
下列範例會從 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 上的完整範例
複製、移動或重新命名物件
您可以使用 AmazonS3 用戶端的 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 上的完整範例
注意
您可以copyObject
搭配 deleteObject 使用 來移動或重新命名物件,方法是先將物件複製到新名稱 (您可以使用與來源和目的地相同的儲存貯體),然後從舊位置刪除物件。
刪除物件
使用 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 上的完整範例
一次刪除多個物件
使用 AmazonS3 用戶端的 deleteObjects
方法,您可以將多個物件從相同儲存貯體中刪除,方法是將它們的名稱傳遞至 link:sdk-for-java/v1/reference/com/amazonaws/services/s3/model/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 上的完整範例