すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクトの削除

最終更新日:Mar 12, 2024

一度に1つ以上のオブジェクトを削除したり、指定されたプレフィックスを名前に含むオブジェクトを削除したり、指定されたディレクトリとそのディレクトリ内のすべてのオブジェクトを削除したりできます。

警告

削除したオブジェクトを元に戻すことはできません。 オブジェクトを削除するときは注意してください。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。

  • オブジェクトを削除するには、oss:DeleteObject権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

単一のオブジェクトの削除

次のサンプルコードは、examplebucketバケットからexampleobject.txtオブジェクトを削除する方法の例を示しています。

<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\Credentials\EnvironmentVariableCredentialsProviderを使用します。OSS\OssClientを使用します。OSS\CoreOssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$provider = new EnvironmentVariableCredentialsProvider();
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 例: examplebucket. 
$bucket = "examplebucket";
// オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 バケット名をフルパスに含めないでください。 
$object = "exampledir/exampleobject.txt";

try {
    $config=配列 (
        "provider" => $provider、
        "endpoint" => $end ポイント、
    );
    $ossClient = new OssClient($config);

    $ossClient->deleteObject($bucket, $object);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}
print(__FUNCTION__) 。 「OK」。 "\n"); 

一度に複数のオブジェクトを削除する

一度に最大1,000個のオブジェクトを削除できます。 複数の指定されたオブジェクト、指定されたプレフィックスを含む名前のオブジェクト、または指定されたディレクトリとディレクトリ内のすべてのオブジェクトを削除できます。

ライフサイクルルールを設定して、オブジェクトを自動的に削除することもできます。 詳細については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。

複数の指定オブジェクトの削除

次のサンプルコードは、指定した複数のオブジェクトを削除する方法の例を示します。

<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 例: examplebucket. 
$bucket = "examplebucket";

try {
   $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
   // 削除するオブジェクトのフルパスを指定します。 完全なパスにバケット名を含めないでください。 
   $objects = array();
   $objects[] = "exampleobjecta.txt";
   $objects[] = "exampledir/sampleobject.txt";
   $result = $ossClient->deleteObjects($bucket, $objects);

   foreach ($infoとして $result) {
      $obj = strval($info);
      printf("Delete".$obj." : Success") 。 "\n");
   }
   printf (「オブジェクトの削除: OK」) 。 "\n");
} catch (OssException $e) {
   printf (「オブジェクトの削除: 失敗」) 。 "\n");
   printf($e->getMessage()) 。 "\n");
   戻ります。} 

指定されたオブジェクト名プレフィックスまたは指定されたディレクトリ内の複数のオブジェクトを削除する

次のサンプルコードでは、指定した名前プレフィックスを持つ複数のオブジェクトを削除する方法と、指定したディレクトリとそのディレクトリ内のすべてのオブジェクトを削除する方法の例を示します。

警告

次のコードでOSS_PREFIXの値が空の文字列またはNULLの場合、バケット内のすべてのオブジェクトが削除されます。

<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
   require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
   require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 例: examplebucket. 
$bucket = "examplebucket";

try {
   $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
   $option=配列 (
      OssClient::OSS_MARKER => null、
      // 削除するオブジェクトの名前のプレフィックスを指定します。 名前にsrcプレフィックスが含まれるすべてのオブジェクトを削除する場合は、プレフィックスをsrcに設定します。 プレフィックスをsrcに設定すると、srcプレフィックス、srcディレクトリ、およびsrcディレクトリ内のすべてのオブジェクトを含む名前のディレクトリ以外のすべてのオブジェクトが削除されます。 
      OssClient::OSS_PREFIX => "src" 、
      // srcディレクトリとディレクトリ内のすべてのオブジェクトのみを削除する場合は、プレフィックスをsrc /に設定します。 
      // OssClient::OSS_PREFIX => "src/" 、
   );
   $bool = true;
   while ($bool){
      // 複数のオブジェクトを一覧表示して削除します。 
      $result = $ossClient->listObjects($bucket,$option);
      $objects = array();
      if(count($result->getObjectList()) > 0){
         foreach ($result->getObjectList() as $key => $info){
            printf("key name:".$info->getKey().PHP_EOL);
            $objects[] = $info->getKey();
         }
         $delObjects = $ossClient->deleteObjects($bucket, $objects);
         foreach ($delObjects as $info){
            $obj = strval($info);
            printf("Delete".$obj." : Success") 。 PHP_EOL);
         }
      }

      if($result->getIsTruncated() === 'true'){
         $option[OssClient::OSS_MARKER] = $result->getNextMarker();
      }else{
         $bool = false;
      }
   }
   printf (「オブジェクトの削除: OK」) 。 PHP_EOL);
} catch (OssException $e) {
   printf (「オブジェクトの削除: 失敗」) 。 PHP_EOL);
   printf($e->getMessage()) 。 PHP_EOL);
   戻ります。} 
説明

try{}catch{} を使用してエラーをキャッチしたときに例外がスローされた場合、オブジェクトは削除されません。 この場合、$e->getMessageを使用してエラーメッセージを取得し、原因を分析できます。

参考資料

  • 一度に1つまたは複数のオブジェクトを削除するために使用される完全なサンプルコードについては、GitHubをご参照ください。

  • オブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteObject」をご参照ください。

  • 複数のオブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteMultipleObjects」をご参照ください。