前些时间在BAE上搭了一个应用,数据写入了百度云储存BCS里。现在想将BCS里的数据搬走,但是官方并没有提供一个一键下载的功能。只好自己写了一个,运行良好。
此脚本在本地PHP环境下运行,需要开启CURL拓展。代码里的krumo是一个调试输出类,如果你没有这个类,直接注释掉即可,不影响功能。bcs的相关类库请自行在此下载。如果发现脚本运行超时,请自行修改php的max_execution_time,给它一个大一点的数值,30秒肯定不够的。
<?php /** * Author: hankcs * Date : 14-3-29 * Time : 下午10:29 */ ini_set("max_execution_time", 36000); require_once '../bcs.class.php'; require_once '../krumo/class.krumo.php'; $host = 'bcs.duapp.com'; $ak = '你的公钥'; $sk = '你的私钥'; $bucket = '要下载的bucket名称'; $baidu_bcs = new BaiduBCS ( $ak, $sk, $host ); $response = json_decode($baidu_bcs->list_object ( $bucket, array('start' => 0,'limit' => 1024,) )->body); $downloaded_size = 0; while($downloaded_size < $response->object_total) { krumo($response); // 下载它们 foreach($response->object_list as $object) { if(!$object->is_dir) { mk_dir('.'.$object->parent_dir); $result = $baidu_bcs->get_object ( $bucket, $object->object, array ("fileWriteTo" => '.'.$object->object ) ); } } $downloaded_size += count($response->object_list); $response = json_decode($baidu_bcs->list_object ( $bucket, array('start' => $downloaded_size,'limit' => 1024,) )->body); } function mk_dir($dir, $mode = 0755) { if (is_dir($dir) || @mkdir($dir,$mode)) return true; if (!mk_dir(dirname($dir),$mode)) return false; return @mkdir($dir,$mode); }
本人QQ858422252
楼主能留下QQ或者其他联系方式吗,这边有大量文件需要从BCS上下载下来,不知是百度BCS接口变化了还是其他原因博主的脚本运行一直出错,希望博主能帮忙解决一下,可以付费
非常感谢分享源码,已经在下载了。。
非常感觉分享源码,已经在下载了。。