因为某些原因要删除BCS里某个bucket内的所有object,但是BAE里面无法直接批量删除(这个方面SAE就好很多了),几百个object也不可能手动一个个删除,上传时候又没有在数据库中保存相关信息,只能通过官方API list object获取object列表,然后逐一删除。原理很简单,首先通过list_object获取bucket内所有object的信息,由于取得的是json,decode之后(特别感谢麦田一根葱的指导)取得object名称,然后用delete object API将object删除。实现方法如下:
1.新建delete.php,上传至BAE某个应用中(或任意主机,需填写变量),内容如下:
<?php
//require_once 'bcs.class.php'; //非BAE环境下需要引用bcs.class.php
$host = 'bcs.duapp.com';
$ak = getenv ( 'HTTP_BAE_ENV_AK' ); //如果不在BAE环境下,请自行填写ak,下面sk同
$sk = getenv ( 'HTTP_BAE_ENV_SK' );
$bucket = ''; //此处填写bucket
function delete_object($baidu_bcs) {
global $bucket;
$opt = array (
'start' => 0);
$response = $baidu_bcs->list_object ( $bucket, $opt );
$body = $response->body;
$str = json_decode($body,true);
$i = 0;
while($i<250){ //此处根据bucket中object数量填写
$object= $str["object_list"][$i]["object"];
$response = $baidu_bcs->delete_object ( $bucket, $object );
echo $object;
echo ' ';
echo $response->isOK () ? "OK\n" : "NOT OK\n";
echo '<br>';
$i++;
}
}
$baidu_bcs = new BaiduBCS ( $ak, $sk, $host );
delete_object($baidu_bcs);
?>


你好,博主!请教一下~~ 有没有办法可以让我一次性下载bucket里面的全部文件呢?我想换地方存储~~~
弄一个数组循环应该可以
谢谢博主,迁移到 SAE 想批量下载来着,看来这个方法可行。没准加个 zip 方法之类还能打包下载了。赞一个!
bcs.class.php
这个文件在哪里? 或请贴出代码,谢谢!
百度现在越来越严格了
您好,博主,您的博客好像是用的 亚马逊的云服务和安全宝搭配吗? 听说亚马逊有免费的云空间 ?可以免费建站是吧。你博客速度很快 不错 赞!
都没用。。。亚马逊有免费试用的VPS,安全宝不是很推荐
@Gimhoy:可以推荐下你使用主机的链接吗?
推荐阿里云,功能不是很多的话也可以用BAE/SAE等云空间
木有用啊。。我传上去,打开就下载了个delete.php 打开是not found flie
@残雪:亲~上传到BAE 不是BCS
@Gimhoy:canxue.duapp.com/delete.php
app.conf里面加一条
- url : (.*)\.php$ script : $1.php@Gimhoy:无用
@残雪:稍等一会儿 app.conf生效慢
@Gimhoy:无用啊、、//
囧。。那个应用里其他页面打开正常不?
博主是我马虎,少copy了代码的错,不过能否优化一下,将bcs下的很多文件夹也一并删除呢?谢谢!
文件夹似乎没有办法。。因为根本就没办法获取文件夹。。。