java bcs删除文件,百度BCS云储存不支持操作文件夹

在多次试验之后,我不得不得出这样一个一个结论,那就是BAE的bcs不支持操作文件夹。为什么这么说呢,因为所有试图将文件夹作为对象操作的代码都会无情地得到一个error “”,比如:

$response = $baidu_bcs->delete_object($bucket, "/data/");

被error:

Body:{"Error":{"code":"2","Message":"object not exists","LogId":"901523708"}}

哪怕你的data目录下空空如也,bcs也不允许你删除它。在bcs的设计理念中,object的概念很模糊。到底什么是对象呢?文件肯定是的,那么文件夹是不是呢?我尝试用list_object_by_dir来列出根目录下的所有对象,发现/data/确实是一个对象,只不过它的is_dir属性为1,而文件的这个属性为0:

{

"object_total":2,

"bucket":"hankcstest",

"start":0,

"limit":200,

"parent_dir":"%2F",

"object_list":[

{

"version_key":"CA38A99734E885ED5D845F413480AC4F",

"object":"/1.txt",

"superfile":"0",

"size":"3886",

"parent_dir":"/",

"is_dir":"0",

"mdatetime":"1374052139",

"ref_key":"",

"content_md5":"23DA3983CB890A6C486D834F1964F9BC"

},

{

"version_key":"",

"object":"/data/",

"superfile":"0",

"size":"0",

"parent_dir":"/",

"is_dir":"1",

"mdatetime":"1374051432",

"ref_key":"",

"content_md5":""

}

]

}

但是,如果你试图通过delete_object来删除/data/,bcs又会告诉你这个对象不存在,真是让人迷惑。让我们从头开始再现这一悖论吧:

echo "Welcome to Baidu Cloud
";

require_once './bcs.class.php';

$baidu_bcs = new BaiduBCS ();

echo "BCS created
";

$bucket = 'hankcstest';

$object = "/data/index.php";

$file = "index.php";

$response = $baidu_bcs->create_object($bucket, $object, $file);

echo "create file $object : ";

echo $response->isOK () ? "OK
" : "NOT OK
";

echo 'Status:' . $response->status . "
";

echo 'Body:' . $response->body . "
";

foreach ( $response->header as $key => $value ) {

echo "Http Header -> $key:$value
";

}

$object = "/";

$response = $baidu_bcs->list_object_by_dir($bucket, $object);

echo "list folder $object : ";

echo $response->isOK () ? "OK
" : "NOT OK
";

echo 'Status:' . $response->status . "
";

echo 'Body:' . $response->body . "
";

foreach ( $response->header as $key => $value ) {

echo "Http Header -> $key:$value
";

}

$object = "/data/index.php";

$response = $baidu_bcs->delete_object($bucket, $object);

echo "delete file $object : ";

echo $response->isOK () ? "OK
" : "NOT OK
";

echo 'Status:' . $response->status . "
";

echo 'Body:' . $response->body . "
";

foreach ( $response->header as $key => $value ) {

echo "Http Header -> $key:$value
";

}

$object = "/data/";

$response = $baidu_bcs->list_object_by_dir($bucket, $object);

echo "list folder $object : ";

echo $response->isOK () ? "OK
" : "NOT OK
";

echo 'Status:' . $response->status . "
";

echo 'Body:' . $response->body . "
";

foreach ( $response->header as $key => $value ) {

echo "Http Header -> $key:$value
";

}

$object = "/data/";

$response = $baidu_bcs->delete_object($bucket, $object);

echo "delete folder $object : ";

echo $response->isOK () ? "OK
" : "NOT OK
";

echo 'Status:' . $response->status . "
";

echo 'Body:' . $response->body . "
";

foreach ( $response->header as $key => $value ) {

echo "Http Header -> $key:$value
";

}

?>

我依次创建了bcs对象,上传了index.php到/data/index.php然后list了一下根目录下对象,发现了一个对象也就是我们的/data/,然后我删掉了/data/index.php,此时/data/就是空的了,然后我试图删掉/data/,失败,对象不存在,完整的输出:

Welcome to Baidu Cloud

BCS created

create file /data/index.php : OK

Status:200

Body:

Http Header -> Server:nginx/1.2.0

Http Header -> Date:Wed, 17 Jul 2013 09:16:50 GMT

Http Header -> Content-Length:0

Http Header -> Connection:keep-alive

Http Header -> Access-Control-Allow-Origin:*

Http Header -> Access-Control-Allow-Methods:GET,PUT,POST,DELETE,OPTIONS,HEAD

Http Header -> x-bs-version:BA45FE1D2198269804DCC07F015996F4

Http Header -> ETag:64b217bb1f3aa429f3226d9c2edb37f4

Http Header -> Content-MD5:64b217bb1f3aa429f3226d9c2edb37f4

Http Header -> x-bs-request-id:MTAuMzYuMTAwLjE2OjgwODA6MTEzNDYyOTgwOToxNy9KdWwvMjAxMyAxNzoxNjo1MCA=

Http Header -> x-bs-file-size:1107

Http Header -> x-bs-client-ip:MjIwLjE4MS41MS4xNDI=

Http Header -> _info:Array

list folder / : OK

Status:200

Body:{"object_total":1,"bucket":"hankcstest","start":0,"limit":200,"parent_dir":"%2F","object_list":[{"version_key":"","object":"\/data\/","superfile":"0","size":"0","parent_dir":"\/","is_dir":"1","mdatetime":"1374051432","ref_key":"","content_md5":""}]}

Http Header -> Server:nginx/1.2.0

Http Header -> Date:Wed, 17 Jul 2013 09:16:50 GMT

Http Header -> Content-Type:application/json

Http Header -> Transfer-Encoding:chunked

Http Header -> Connection:keep-alive

Http Header -> Access-Control-Allow-Origin:*

Http Header -> Access-Control-Allow-Methods:GET,PUT,POST,DELETE,OPTIONS,HEAD

Http Header -> x-bs-request-id:Y3EwMS1iYWUtb2ZmdWkwLTkuY3EwMS5iYWlkdS5jb206ODA6Mzc1NzQ2MzM5NTU=

Http Header -> x-bs-client-ip:MjIwLjE4MS41MS4xMzk=

Http Header -> _info:Array

delete file /data/index.php : OK

Status:200

Body:

Http Header -> Server:nginx/1.2.0

Http Header -> Date:Wed, 17 Jul 2013 09:16:50 GMT

Http Header -> Content-Length:0

Http Header -> Connection:keep-alive

Http Header -> Access-Control-Allow-Origin:*

Http Header -> Access-Control-Allow-Methods:GET,PUT,POST,DELETE,OPTIONS,HEAD

Http Header -> x-bs-client-ip:MjIwLjE4MS41MS4xNDE=

Http Header -> _info:Array

list folder /data/ : OK

Status:200

Body:{"object_total":0,"bucket":"hankcstest","start":0,"limit":200,"parent_dir":"%2Fdata%2F","object_list":[]}

Http Header -> Server:nginx/1.2.0

Http Header -> Date:Wed, 17 Jul 2013 09:16:50 GMT

Http Header -> Content-Type:application/json

Http Header -> Transfer-Encoding:chunked

Http Header -> Connection:keep-alive

Http Header -> Access-Control-Allow-Origin:*

Http Header -> Access-Control-Allow-Methods:GET,PUT,POST,DELETE,OPTIONS,HEAD

Http Header -> x-bs-request-id:bTEtYmFlLW9mZnVpMC03Lm0xLmJhaWR1LmNvbTo4MDozODE0NTM2MDgxMQ==

Http Header -> x-bs-client-ip:MjIwLjE4MS41MS4xNDk=

Http Header -> _info:Array

delete folder /data/ : NOT OK

Status:404

Body:{"Error":{"code":"2","Message":"object not exists","LogId":"2443104357"}}

Http Header -> Server:nginx/1.2.0

Http Header -> Date:Wed, 17 Jul 2013 09:16:50 GMT

Http Header -> Content-Type:application/json

Http Header -> Content-Length:73

Http Header -> Connection:keep-alive

Http Header -> Access-Control-Allow-Origin:*

Http Header -> Access-Control-Allow-Methods:GET,PUT,POST,DELETE,OPTIONS,HEAD

Http Header -> x-bs-request-id:MTAuMzYuMTM1LjM2OjgwODA6MjQ0MzEwNDM1NzoxNy9KdWwvMjAxMyAxNzoxNjo1MCA=

Http Header -> _info:Array

你可能会觉得奇怪,既然文件夹删不掉,那么delete_bucket不就也失去了存在的意义吗?一个永远清空不料的bucket如何删得掉?BAE怪人有怪招,使用一句delete_object($bucket, "/")之后整个bucket就消失了,你说怪不怪?

我在想这是不是BAE的设计失误,希望某一天BAE能够重新设计它的bcs libs。

I2A1vzXQgX.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值