您可以根据需要删除单个文件(Object)、删除指定的多个文件、删除指定前缀的文件或者删除指定目录及目录下的所有文件。

警告 请您谨慎使用删除操作,文件删除后将无法恢复。

删除单个文件

以下代码用于删除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';
}

use OSS\OssClient;
use OSS\Core\OssException;

// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
$accessKeyId = "yourAccessKeyId";
$accessKeySecret = "yourAccessKeySecret";
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "yourEndpoint";
// 填写Bucket名称,例如examplebucket。
$bucket = "examplebucket";
// 填写文件完整路径,例如exampledir/exampleobject.txt。文档完整路径中不能包含Bucket名称。
$object = "exampledir/exampleobject.txt";

try{
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

    $ossClient->deleteObject($bucket, $object);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . "OK" . "\n");          

批量删除文件

批量删除文件时,每次最多删除1000个文件。您可以删除指定的多个文件、删除指定前缀的文件或者删除指定目录及目录下的所有文件。

OSS还支持通过设置生命周期规则来自动删除文件。更多信息,请参见开发指南中的生命周期规则介绍

  • 删除指定的多个文件

    以下代码用于删除examplebucket中指定的多个文件。

    <?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';
    }
    
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    $accessKeyId = "yourAccessKeyId";
    $accessKeySecret = "yourAccessKeySecret";
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    $endpoint = "yourEndpoint";
    // 填写Bucket名称,例如examplebucket。
    $bucket = "examplebucket";
    
    try {
       $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
       // 填写需要删除的多个文件完整路径。文件完整路径中不能包含Bucket名称。
       $objects = array();
       $objects[] = "exampleobjecta.txt";
       $objects[] = "exampledir/sampleobject.txt";
       $result = $ossClient->deleteObjects($bucket, $objects);
    
       foreach ($result as $info){
          $obj = strval($info);
          printf("Delete ".$obj." : Success" . "\n");
       }
       printf("Delete Objects : OK" . "\n");
    } catch (OssException $e) {
       printf("Delete Objects : Failed" . "\n");
       printf($e->getMessage() . "\n");
       return;
    }            
  • 删除指定前缀(prefix)的文件
    以下代码用于删除examplebucket中以file为前缀的文件。
    <?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';
    }
    
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    $accessKeyId = "yourAccessKeyId";
    $accessKeySecret = "yourAccessKeySecret";
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    $endpoint = "yourEndpoint";
    // 填写Bucket名称,例如examplebucket。
    $bucket = "examplebucket";
    
    try {
       $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
       $option = array(
          OssClient::OSS_MARKER => null,
          OssClient::OSS_PREFIX => "file",
       );
       $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("Delete Objects : OK" . PHP_EOL);
    } catch (OssException $e) {
       printf("Delete Objects : Failed" . PHP_EOL);
       printf($e->getMessage() . PHP_EOL);
       return;
    }
  • 删除指定目录及目录下的所有文件
    以下代码用于删除examplebucket中exampledir目录及目录下的所有文件。
    <?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';
    }
    
    use OSS\OssClient;
    use OSS\Core\OssException;
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    $accessKeyId = "yourAccessKeyId";
    $accessKeySecret = "yourAccessKeySecret";
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    $endpoint = "yourEndpoint";
    // 填写Bucket名称,例如examplebucket。
    $bucket = "examplebucket";
    
    try {
       $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
       $option = array(
          OssClient::OSS_MARKER => null,
          OssClient::OSS_PREFIX => "exampledir/",
       );
       $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("Delete Objects : OK" . PHP_EOL);
    } catch (OssException $e) {
       printf("Delete Objects : Failed" . PHP_EOL);
       printf($e->getMessage() . PHP_EOL);
       return;
    }
说明 如果使用try{}catch{}获取错误时抛出Exception,则表示没有成功删除单个或多个文件。此时您还可以根据$e->getMessage来分析错误原因。