刪除單一物件 - Amazon Simple Storage Service

刪除單一物件

您可以使用 Amazon S3 主控台或 DELETE API 從 S3 儲存貯體中刪除單一現有物件。如需在 Amazon S3 中使用刪除物件的詳細資訊,請參閱「刪除 Amazon S3 物件」。

因為 S3 儲存貯體中的所有物件都會導致儲存成本,所以您應該刪除不再需要的物件。例如,如果您要收集日誌檔案,最好在不再需要它們時將其刪除。您可以設定生命週期規則以自動刪除如日誌檔案等物件。如需詳細資訊,請參閱 設定儲存貯體的生命週期組態

如需 Amazon S3 功能與定價的相關資訊,請參閱 Amazon S3 定價

請依照下列步驟使用 Amazon S3 主控台從儲存貯體中刪除單一物件。

刪除物件

  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

  2. Bucket name (儲存貯體名稱) 清單中,選擇您要刪除物件所在的儲存貯體名稱。

  3. 透過版本控制刪除已啟用版本控制之儲存貯體中的物件:

    • Off (關閉),Amazon S3 建立刪除標記。若要刪除物件,請選取物件,然後選擇 delete (刪除),並在文字欄位中輸入 delete 來確認您的選擇。

    • On (開啟),Amazon S3 將永久刪除物件版本。選取您想要刪除的物件版本,然後選擇 delete (刪除),並在文字欄位中輸入 permanently delete 來確認您的選擇。

下列範例示範如何使用 AWS SDK 從儲存貯體中刪除物件。如需詳細資訊,請參閱《Amazon Simple Storage Service API 參考》中的 DELETE 物件

如果您有已啟用 S3 版本控制的儲存貯體,則您有下列選項:

  • 透過指定版本 ID 來刪除物件的特定版本。

  • 若要刪除未指定版本 ID 的物件,Amazon S3 會在此物件上新增刪除標記。

如需 S3 版本控制的詳細資訊,請參閱「在 S3 儲存貯體中使用版本控制」。

Java

範例 1:刪除物件 (未啟用版本控制的儲存貯體)

下列範例假定情況為尚未啟用版本控制的儲存貯體,或尚沒有任何版本 IDs 的物件。在刪除要求中,您可僅指定物件金鑰,而不用版本 ID。

如需建立及測試可行範例的說明,請參閱 測試 Amazon S3 Java 程式碼範例

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.DeleteObjectRequest; import java.io.IOException; public class DeleteObjectNonVersionedBucket { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String keyName = "*** Key name ****"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); s3Client.deleteObject(new DeleteObjectRequest(bucketName, keyName)); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }

範例 2:刪除物件 (啟用版本控制的儲存貯體)

下列範例會示範刪除版本控制的儲存貯體裡之物件。範例將示範刪除指定的物件版本,依照指定物件金鑰名稱和版本 ID 即可達成。

此範例執行下列操作:

  1. 新增範例物件至儲存貯體。Amazon S3 會傳回最近新增之物件的版本 ID。範例中,會在刪除要求中使用此版本 ID。

  2. 刪除指定的物件版本,依照指定物件金鑰名稱和版本 ID 即可達成。如果此物件沒有其他的版本,則 Amazon S3 會刪除所有的物件。不然的話,Amazon S3 只會刪除指定的版本。

    注意

    您可以傳送 ListVersions 要求,取得物件的版本 ID。

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.BucketVersioningConfiguration; import com.amazonaws.services.s3.model.DeleteVersionRequest; import com.amazonaws.services.s3.model.PutObjectResult; import java.io.IOException; public class DeleteObjectVersionEnabledBucket { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String keyName = "*** Key name ****"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Check to ensure that the bucket is versioning-enabled. String bucketVersionStatus = s3Client.getBucketVersioningConfiguration(bucketName).getStatus(); if (!bucketVersionStatus.equals(BucketVersioningConfiguration.ENABLED)) { System.out.printf("Bucket %s is not versioning-enabled.", bucketName); } else { // Add an object. PutObjectResult putResult = s3Client.putObject(bucketName, keyName, "Sample content for deletion example."); System.out.printf("Object %s added to bucket %s\n", keyName, bucketName); // Delete the version of the object that we just created. System.out.println("Deleting versioned object " + keyName); s3Client.deleteVersion(new DeleteVersionRequest(bucketName, keyName, putResult.getVersionId())); System.out.printf("Object %s, version %s deleted\n", keyName, putResult.getVersionId()); } } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

下列範例示範如何從已版本控制和未進行版本控制的儲存貯體中刪除物件。如需 S3 版本控制的詳細資訊,請參閱「在 S3 儲存貯體中使用版本控制」。

範例 刪除未進行版本控制的儲存貯體中之物件

下列 C# 範例會刪除未進行版本控制的儲存貯體中之物件。此範例假定情況為尚未有版本 IDs 的物件,也就是說您不必指定版本 ID。僅指定物件金鑰。

如需如何建立與測試工作範例的資訊,請參閱「執行 Amazon S3 .NET 程式碼範例」。

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class DeleteObjectNonVersionedBucketTest { private const string bucketName = "*** bucket name ***"; private const string keyName = "*** object key ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); DeleteObjectNonVersionedBucketAsync().Wait(); } private static async Task DeleteObjectNonVersionedBucketAsync() { try { var deleteObjectRequest = new DeleteObjectRequest { BucketName = bucketName, Key = keyName }; Console.WriteLine("Deleting an object"); await client.DeleteObjectAsync(deleteObjectRequest); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when deleting an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when deleting an object", e.Message); } } } }

範例 刪除版本控制的儲存貯體中之物件

下列 C# 範例會刪除版本控制的儲存貯體裡之物件。範例刪除指定的物件版本,藉指定物件金鑰名稱和版本 ID 即可達成。

此程式碼會執行下列任務:

  1. 對您所指定的儲存貯體啟用 S3 版本控制 (如果 S3 版本控制早已啟用,則不受此步驟影響)。

  2. 新增範例物件至儲存貯體。據此,Amazon S3 會傳回最近新增之物件的版本 ID。範例中,會在刪除要求中使用此版本 ID。

  3. 刪除範例版本,依照指定物件金鑰名稱和版本 ID 即可達成。

    注意

    您也可以傳送 ListVersions 要求,取得物件的版本 ID。

    var listResponse = client.ListVersions(new ListVersionsRequest { BucketName = bucketName, Prefix = keyName });

如需如何建立與測試工作範例的資訊,請參閱「執行 Amazon S3 .NET 程式碼範例」。

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class DeleteObjectVersion { private const string bucketName = "*** versioning-enabled bucket name ***"; private const string keyName = "*** Object Key Name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); CreateAndDeleteObjectVersionAsync().Wait(); } private static async Task CreateAndDeleteObjectVersionAsync() { try { // Add a sample object. string versionID = await PutAnObject(keyName); // Delete the object by specifying an object key and a version ID. DeleteObjectRequest request = new DeleteObjectRequest { BucketName = bucketName, Key = keyName, VersionId = versionID }; Console.WriteLine("Deleting an object"); await client.DeleteObjectAsync(request); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when deleting an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when deleting an object", e.Message); } } static async Task<string> PutAnObject(string objectKey) { PutObjectRequest request = new PutObjectRequest { BucketName = bucketName, Key = objectKey, ContentBody = "This is the content body!" }; PutObjectResponse response = await client.PutObjectAsync(request); return response.VersionId; } } }
PHP

此範例說明如何使用 AWS SDK for PHP 第 3 版裡的類別,來刪除未使用版本控制的儲存貯體中之物件。如需刪除已使用版本控制之儲存貯體中物件的資訊,請參閱「使用 REST API」。

此範例假設您已遵循「使用 AWS SDK for PHP 與執行 PHP 的範例」中的說明進行操作,且已正確安裝 AWS SDK for PHP。如需執行本指南中 PHP 範例的資訊,請參閱「執行 PHP 範例」。

下列 PHP 範例會刪除儲存貯體中的物件。因為此範例說明如何刪除未進行版本控制的儲存貯體的物件,所以它僅在刪除要求中提供儲存貯體名稱和物件索引鍵 (非版本 ID)。

<?php require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // 1. Delete the object from the bucket. try { echo 'Attempting to delete ' . $keyname . '...' . PHP_EOL; $result = $s3->deleteObject([ 'Bucket' => $bucket, 'Key' => $keyname ]); if ($result['DeleteMarker']) { echo $keyname . ' was deleted or does not exist.' . PHP_EOL; } else { exit('Error: ' . $keyname . ' was not deleted.' . PHP_EOL); } } catch (S3Exception $e) { exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL); } // 2. Check to see if the object was deleted. try { echo 'Checking to see if ' . $keyname . ' still exists...' . PHP_EOL; $result = $s3->getObject([ 'Bucket' => $bucket, 'Key' => $keyname ]); echo 'Error: ' . $keyname . ' still exists.'; } catch (S3Exception $e) { exit($e->getAwsErrorMessage()); }
Javascript

此範例顯示如何使用 AWS SDK for JavaScript 的第三版來刪除物件。如需 AWS SDK for JavaScript 的詳細資訊,請參閱 使用 AWS SDK for JavaScript

import { DeleteObjectCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js" // Helper function that creates Amazon S3 service client module. export const bucketParams = { Bucket: "BUCKET_NAME", Key: "KEY" }; export const run = async () => { try { const data = await s3Client.send(new DeleteObjectCommand(bucketParams)); console.log("Success. Object deleted.", data); return data; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

若要一個請求刪除一個物件,請使用 DELETE API。如需詳細資訊,請參閱 DELETE 物件。如需有關使用 CLI 刪除物件的詳細資訊,請參閱 delete-object

您可以使用 AWS SDK 來刪除物件。但也可視應用程式所需,直接傳送 REST 要求。如需詳細資訊,請參閱《Amazon Simple Storage Service API 參考》中的 DELETE 物件