您可以根据需要删除单个文件(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来分析错误原因。