因为某些原因要删除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里面加一条
@Gimhoy:无用
@残雪:稍等一会儿 app.conf生效慢
@Gimhoy:无用啊、、//
囧。。那个应用里其他页面打开正常不?
博主是我马虎,少copy了代码的错,不过能否优化一下,将bcs下的很多文件夹也一并删除呢?谢谢!
文件夹似乎没有办法。。因为根本就没办法获取文件夹。。。