

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

# 刪除單一物件
<a name="delete-objects"></a>

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

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

如需 Amazon S3 功能與定價的相關資訊，請參閱 [Amazon S3 定價](https://aws.amazon.com/s3/pricing)。

## 使用 S3 主控台
<a name="delete-object-console"></a>

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

**警告**  
當您在 Amazon S3 主控台中永久刪除物件或指定的物件版本時，將無法復原刪除。

**刪除已啟用或已暫停版本控制的物件**
**注意**  
 如果已暫停版本控制之儲存貯體中物件的版本 ID 標示為 `NULL`，由於不存在任何先前版本，因此 S3 會永久刪除該物件。不過，如果列出已暫停版本控制之儲存貯體中物件的有效版本 ID，則 S3 會為已刪除的物件建立刪除標記，同時保留物件的先前版本。

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**或**目錄儲存貯體**。

1. 在儲存貯體清單中，選擇您要從中刪除物件的儲存貯體名稱。

1. 選取物件，然後選擇**刪除**。

1. 若要在**刪除物件**文字方塊中確認刪除**指定的物件**下的物件清單，請輸入 **delete**。

**永久刪除已啟用版本控制之儲存貯體中的特定物件版本**
**警告**  
當您在 Amazon S3 中永久刪除特定物件版本時，將無法復原刪除。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

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

1. 選取您要刪除的物件。

1. 選擇**顯示版本**切換。

1. 選取物件版本，然後選擇**刪除**。

1. 若要在**刪除物件**文字方塊中確認永久刪除**指定的物件**下列出的特定物件版本，請輸入**永久刪除**。Amazon S3 會永久刪除特定物件版本。

**在「未」**啟用版本控制的 Amazon S3 儲存貯體中永久刪除物件**
**警告**  
當您在 Amazon S3 中永久刪除物件時，將無法復原刪除。此外，對於任何未啟用版本控制的儲存貯體，刪除是永久的。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**。

1. 在儲存貯體清單中，選擇您要從中刪除物件的儲存貯體名稱。

1. 選取物件，然後選擇**刪除**。

1. 若要在**刪除物件**文字方塊中確認永久刪除**指定的物件**下列出的物件，請輸入**永久刪除**。

**注意**  
如果您在刪除物件時遇到任何問題，請參閱[我想永久刪除版本控制的物件](troubleshooting-versioning.md#delete-objects-permanent)。

## 使用 AWS CLI
<a name="delete-object-cli"></a>



若要一個請求刪除一個物件，請使用 `DELETE` API。如需詳細資訊，請參閱 [DELETE 物件](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html)。如需有關使用 CLI 刪除物件的詳細資訊，請參閱 [delete-object](https://awscli.amazonaws.com/v2/documentation/api/2.0.34/reference/s3api/delete-object.html)。

# 使用 REST API
<a name="DeletingAnObjectsUsingREST"></a>

您可以使用 AWS SDKs來刪除物件。但也可視應用程式所需，直接傳送 REST 要求。如需詳細資訊，請參閱《Amazon Simple Storage Service API 參考》**中的 [DELETE 物件](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html)。

## 使用 AWS SDKs
<a name="DeletingOneObject"></a>

下列範例示範如何使用 AWS SDKs 從儲存貯體中刪除物件。如需詳細資訊，請參閱《Amazon Simple Storage Service API 參考》**中的 [DELETE 物件](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html)。

如果您有已啟用 S3 版本控制的儲存貯體，則您有下列選項：
+ 透過指定版本 ID 來刪除物件的特定版本。
+ 若要刪除未指定版本 ID 的物件，Amazon S3 會在此物件上新增刪除標記。

如需 S3 版本控制的詳細資訊，請參閱「[使用 S3 版本控制保留多個版本的物件](Versioning.md)」。

如需更多範例和其他語言的範例，請參閱《*Amazon S3 API 參考*》中的[`DeleteObject`搭配使用 AWS SDK 或 CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_DeleteObject_section.html)。

------
#### [ Java ]

若要使用適用於 Java 的 AWS 開發套件刪除物件，您可以從版本控制和非版本控制的儲存貯體刪除物件：
+ *非版本控制的儲存貯體：*在刪除請求中，僅指定物件金鑰，而非版本 ID。
+ *版本控制的儲存貯體：*您可以藉指定物件金鑰名稱和版本 ID，刪除特定的物件版本。如果此物件沒有其他的版本，則 Amazon S3 會刪除所有的物件。不然的話，Amazon S3 只會刪除指定的版本。
**注意**  
您可以傳送 `ListVersions` 要求，取得物件的版本 ID。

如需如何使用適用於 Java 的 AWS SDK 刪除單一物件的範例，請參閱《*Amazon S3 API 參考*》中的[刪除物件](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_DeleteObject_section.html)。

------
#### [ .NET ]

下列範例示範如何從已版本控制和未進行版本控制的儲存貯體中刪除物件。如需 S3 版本控制的詳細資訊，請參閱「[使用 S3 版本控制保留多個版本的物件](Versioning.md)」。

**Example 刪除未進行版本控制的儲存貯體中之物件**  
下列 C\$1 範例會刪除未進行版本控制的儲存貯體中之物件。此範例假定情況為尚未有版本 IDs 的物件，也就是說您不必指定版本 ID。僅指定物件金鑰。  
如需有關設定和執行程式碼範例的資訊，請參閱《[適用於 .NET AWS 的 SDK 開發人員指南》中的適用於 .NET 的 SDK 入門](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)。 *AWS *  

```
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);
            }
        }
    }
}
```

**Example 刪除版本控制的儲存貯體中之物件**  
下列 C\$1 範例會刪除版本控制的儲存貯體裡之物件。範例刪除指定的物件版本，藉指定物件金鑰名稱和版本 ID 即可達成。  
此程式碼會執行下列任務：  

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

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

1. 刪除範例版本，依照指定物件金鑰名稱和版本 ID 即可達成。
**注意**  
您也可以傳送 `ListVersions` 要求，取得物件的版本 ID。  

   ```
   var listResponse = client.ListVersions(new ListVersionsRequest { BucketName = bucketName, Prefix = keyName }); 
   ```
如需有關設定和執行程式碼範例的資訊，請參閱《[適用於 .NET 的 AWS SDK 開發人員指南》中的適用於 .NET 的 SDK 入門](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)。 *AWS *  

```
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 ]

此範例示範如何使用 第 3 版的類別 適用於 PHP 的 AWS SDK ，從非版本控制的儲存貯體中刪除物件。如需刪除已使用版本控制之儲存貯體中物件的資訊，請參閱「[使用 REST API](DeletingAnObjectsUsingREST.md)」。

如需適用於 Ruby 的 AWS SDK API 的詳細資訊，請前往[AWS 適用於 Ruby 的 SDK - 第 2 版](https://docs.aws.amazon.com/sdkforruby/api/index.html)。

下列 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 ]

```
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();
```

------