当oss中虚拟目录下的文件过多,百万级别时,若通过C-SDK中的oss_delete_objects_by_prefix函数不能一次删除。
会有如下错误:
/** * 批量删除文件<br> * 注意: 文件会被直接删除 * @param string $Prefix 需要批量删除的object的key前缀(不能为空) * @return void */ public function deleteAll($Prefix) { static $iGroup = 50; //每次批量删除处理的分组大小 if (empty($Prefix)) return; $aGetListParam = array('Bucket'=> $this->msBucket, 'Prefix'=> $Prefix, 'MaxKeys'=>$iGroup); $aDeleteParam = array('Bucket'=> $this->msBucket, 'Key'=>''); do { $iCnt = 0; $objectListing = $this->mOSS->listObjects($aGetListParam); //取一组分组数据 $aFileBuf = array(); //初始化缓存 /*取出列表*/ foreach ($objectListing->getObjectSummarys() as $objectSummary) $aFileBuf[] = $objectSummary->getKey(); $iCnt = count($aFileBuf); unset($objectListing); /*删除列表内的object*/ foreach ($aFileBuf as $sNode) { $aDeleteParam['Key'] = $sNode; $this->mOSS->deleteObject($aDeleteParam); } unset($aFileBuf); }while($iCnt === $iGroup); }
答案来源网络,供参考,希望对您有帮助
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。