开发者社区> 问答> 正文

OSS虚拟目录下文件过多(100万个)无法通过以C-SDK中特定前缀方式删除

当oss中虚拟目录下的文件过多,百万级别时,若通过C-SDK中的oss_delete_objects_by_prefix函数不能一次删除。
会有如下错误:
_bmp

展开
收起
lynnlz 2017-10-09 16:36:50 3006 0
1 条回答
写回答
取消 提交回答
  • /**  * 批量删除文件<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);  }
    

    答案来源网络,供参考,希望对您有帮助

    2019-10-09 15:56:00
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
一个跨平台的云服务SDK需要什么 立即下载
云存储之OSS实战进阶分享 立即下载
OSS运维进阶实战手册 立即下载