用过腾讯cos对象储存的知道...用起来真烦人..删除文件夹的话需要把文件夹下所有文件都删掉了才可以删除,而且还不能批量删除,这是最气的....而且还不能批量下载...上传的话到是可以批量上传文件.
还好腾讯cos提供了api,但是这个api删除文件夹同样需要把文件夹下所有文件删除才可以删文件夹.......
所以我就昨天就研究了一下,然后写了一个php脚本来执行一键上传下载删除的方法.
首先需要去腾讯对象储存申请一个秘钥:https://console.qcloud.com/cos4/secret
然后去下载php的sdk文件:https://mc.qcloudimg.com/static/archive/5ac534d6c4af2462b3996c8a4d9c3b06/cos-php-sdk-v4-master.zip
然后拿到sdk先在qcloudcos/conf.php下配置一下申请的秘钥.
<?php /** * @Name 腾讯对象储存CosPHP辅助脚本 * @Author 幻音丶小涛 * @Website https://www.acgxt.com * @Time 2017-05-31 14:17:28 * 使用命令: * sudo php run.php -l / 列出这个bucket的文件列表 * sudo php run.php -l /js/ 列出这个bucket下的js文件夹的所有列表 * sudo php run.php -R / 删除整个cos对象储存文件列表 * sudo php run.php -R /js/ 删除cos下的js文件夹所有文件包括文件夹 * sudo php run.php -r 1.txt 删除cos下的1.txt文件 * sudo php run.php -dl / 将整个cos下载到当前文件夹 * sudo php run.php -dl /js/ 将cos下的js文件夹所有文件下载到当前目录的./js/文件夹内 * sudo php run.php -dl /js/ ./download/ 将cos下的js文件夹所有文件下载到./download/文件夹内(download需要自己手动创建) * sudo php run.php -up 将当前目录的所有文件上传到cos的根目录下 * sudo php run.php -up ./file/ 将本地的./file/文件夹上传到cos根目录下 * sudo php run.php -up ./file/ /upload/ 将本地的./file/文件夹上传到cos下的/upload/文件内(upload会自动创建) * sudo php run.php -up ./1.txt 将本地的./1.txt文件上传到cos根目录 * sudo php run.php -up ./1.txt /upload/ 将本地的./1.txt文件上传到cos下的/upload/文件夹内(upload会自动创建) */ namespace Xt\Tools; use qcloudcos\Cosapi; class XtCosTools{ private $bucket = null; public function __construct($bucket,$args){ if(substr(php_sapi_name(), 0, 3) !== 'cli')die("cos辅助脚本文件必须在cli模式下运行哦!.\n"); $this->bucket = $bucket; if(count($args)==1){ $this->help(); } $type = isset($args[1])?$args[1]:null; switch($type){ case '-R': if(!isset($args[2])){ echo "\033[31m-R [文件夹名称] 删除文件夹下所有文件包括文件夹\n"; exit; } $this->removeDirAll($args[2]); echo "\033[33m删除文件夹{$args[2]}下的所有文件完成\n"; break; case '-r': if(!isset($args[2])){ echo "\033[31m-r [文件名称] 删除指定文件\n"; exit; } try{ $this->removeFile($args[2]); echo "\033[32m删除文件{$args[2]}成功\n"; }catch(\Exception $e){ echo "\033[31m删除文件{$args[2]}失败:{$e->getMessage()}\n"; } break; case '-up': if(isset($args[2])){ if(!file_exists($args[2])){ echo "\033[31m本地文件或文件夹{$args[2]}无法找到...\n"; exit; }else{ $dir = $args[2]; } }else{ $dir = './'; } $cosDir = "/"; if(isset($args[3])){ $cosDir = $args[3]; $r = Cosapi::statFolder($this->bucket,$cosDir); if($r['code']!=0){ echo "\033[31m无法找到目录{$cosDir}:{$r['message']}\n"; exit; } } $this->upload($dir,$cosDir); echo "\033[36m上传cos_bucket_{$bucket}全部完成!\n"; break; case '-dl': if(!isset($args[2])){ echo "\033[31m-dl [文件夹名称] [输出的文件夹] 将cos指定文件夹资源下载到指定文件夹(根目录为/)\n"; exit; } if(isset($args[3])){ if(!is_dir($args[3])){ echo "\033[31m{$args[3]}这个目录无法找到...\n"; exit; }else{ $dir = $args[3]; } }else{ $dir = null; } $this->getList($args[2],2,$dir); echo "\033[36m下载cos_bucket_{$bucket}全部完成!\n"; break; case '-l': if(!isset($args[2])){ echo "\033[31m-l [文件夹名称] 获取指定文件夹下的文件(根目录为/)\n"; exit; } $this->getList($args[2],1); break; case '-h': echo "\033[33msudo php run.php -l / 列出这个bucket的文件列表\nsudo php run.php -l /js/ 列出这个bucket下的js文件夹的所有列表\nsudo php run.php -R / 删除整个cos对象储存文件列表\nsudo php run.php -R /js/ 删除cos下的js文件夹所有文件包括文件夹\nsudo php run.php -r 1.txt 删除cos下的1.txt文件\nsudo php run.php -dl / 将整个cos下载到当前文件夹\nsudo php run.php -dl /js/ 将cos下的js文件夹所有文件下载到当前目录的./js/文件夹内\nsudo php run.php -dl /js/ ./download/ 将cos下的js文件夹所有文件下载到./download/文件夹内(download需要自己手动创建)\nsudo php run.php -up 将当前目录的所有文件上传到cos的根目录下\nsudo php run.php -up ./file/ 将本地的./file/文件夹上传到cos根目录下\nsudo php run.php -up ./file/ /upload/ 将本地的./file/文件夹上传到cos下的/upload/文件内(upload会自动创建)\nsudo php run.php -up ./1.txt 将本地的./1.txt文件上传到cos根目录\nsudo php run.php -up ./1.txt /upload/ 将本地的./1.txt文件上传到cos下的/upload/文件夹内(upload会自动创建)\n"; exit; break; } } private function help(){ echo "\033[33m--XtCosTools_PHP辅助脚本命令列表\033[0m\n"; echo " -R [文件夹名称] 删除文件夹下所有文件包括文件夹\n"; echo " -r [文件名称] 删除指定文件\n"; echo " -dl [文件夹名称] [输出的文件夹] 将cos指定文件夹资源下载到指定文件夹(根目录为/)\n"; echo " -up [本地文件或文件夹名称] [cos上的文件夹(默认根目录)] 将指定文件或文件夹上传到cos上的文件夹内\n"; echo " -l [文件夹名称] 获取指定文件夹下的文件(根目录为/)\n"; echo " -h 详细的说明\n"; echo "By:幻音丶小涛,https://www.acgxt.com\n"; exit; } private function upload($dir,$cos){ if(is_dir($dir)){ $r = scandir($dir); if(substr($dir,0,2)=="./"){ $dirs=substr($dir,2); }else if(substr($dir,0,1)=="/") { $dirs = substr($dir,1); }else{ $dirs = $dir; } foreach($r as $v){ if($v=='.'||$v=='..')continue; if(is_file($dir.$v)){ $this->uploadFile($dirs.$v,$cos); }else if(is_dir($dir.$v)){ $cosDir = $cos.$dirs.$v.'/'; $result = Cosapi::statFolder($this->bucket, $cosDir); if($result['code']==0){ $this->upload($dir.$v.'/',$cos); }else{ Cosapi::createFolder($this->bucket,$cosDir); //腾讯云api可能创建成功也会code!=0 $this->upload($dir.$v.'/',$cos); } } } }else if(is_file($dir)){ $r = $dir; $this->uploadFile($r,$cos); } } private function uploadFile($file,$cosDir){ echo "\033[33m开始上传{$file}->{$cosDir}{$file}\n"; $ret = Cosapi::upload($this->bucket, $file, $cosDir.$file); if($ret['code']==0){ echo "\033[32m上传到{$cosDir}{$file}成功!\n"; }else{ echo "\033[31m上传到{$cosDir}{$file}失败...{$ret['message']}!\n"; } } private function getList($folder,$o=0,$d=null){ $data = []; $result = Cosapi::listFolder($this->bucket, $folder); if($result['code']!=0){ echo "\033[31m查询cos_bucket错误:{$result['message']}"; exit; } foreach($result['data']['infos'] as $k=>$v){ if(substr($v['name'],-1)=="/"){ if($o==1)echo "\033[33m\033[4m".$folder.$v['name']."\033[0m\n"; $data[$v['name']] = $this->getList($folder.$v['name'],$o); }else{ if($o==1)echo "\033[32m".$folder.$v['name']."\n"; if($o==2){ if(isset($v['source_url'])){ $this->autoCreateDir('.'.$folder); echo "\033[32m开始下载:{$v['source_url']}\n"; if(is_null($d)){ $dir = ".".$folder; }else{ $dir = $d; } shell_exec("cd {$dir} &&wget -q -O \"{$v['name']}\" {$v['source_url']}"); if(is_file($dir.$v['name'])){ echo "\033[33m下载成功,保存在:".$dir.$v['name']."\n"; }else{ echo "\033[31m下载{$v['source_url']}失败....\n"; } } } array_push($data,$folder.$v['name']); } } return $data; } private function autoCreateDir($dir){ if(!is_dir($dir)){ if(!is_dir(dirname($dir)))$this->autoCreateDir(dirname($dir)); mkdir($dir); } } private function removeDirAll($dir){ $list = $this->getList($dir); foreach($list as $k=>$v){ if(is_array($v)){ if(count($v)==0){ try{ $this->removeDir($dir.$k); echo "\033[32m删除文件夹{$dir}{$k}成功\n"; }catch(\Exception $e){ echo "\033[31m删除文件夹{$dir}{$k}失败:{$e->getMessage()}\n"; } }else{ $this->removeDirAll($dir.$k); try{ $this->removeDir($dir.$k); echo "\033[32m删除文件夹{$dir}{$k}成功\n"; }catch(\Exception $e){ echo "\033[31m删除文件夹{$dir}{$k}失败:{$e->getMessage()}\n"; } } }else{ try{ $this->removeFile($v); echo "\033[32m删除文件{$v}成功\n"; }catch(\Exception $e){ echo "\033[31m删除文件{$v}失败:{$e->getMessage()}\n"; } } } } private function removeFile($file){ $result = Cosapi::stat($this->bucket, $file); if($result['code']==0){ $result = Cosapi::delFile($this->bucket, $file); if($result['code']==0){ return true; }else{ throw new \Exception($result['message']); } } } private function removeDir($dir){ $result = Cosapi::statFolder($this->bucket, $dir); if($result['code']==0){ $result = Cosapi::delFolder($this->bucket, $dir); if($result['code']==0){ return true; }else{ throw new \Exception($result['message']); } } } } //坑比腾讯cos....
也可以选择下载:https://static.acgxt.com/file/XtCosTools.class.php.tar.gz
将脚本文件放到腾讯cos的sdk文件根目录内
然后打开sample.php文件
修改里面的代码(直接全部删除把,然后复制下面的)
<?php require('./include.php'); require './XtCosTools.class.php'; use qcloudcos\Cosapi; Cosapi::setTimeout(0); // 设置COS所在的区域,对应关系如下: // 华南 -> gz // 华中 -> sh // 华北 -> tj // 华东 -> sh Cosapi::setRegion('sh'); $bucket = '';//对象储存桶名称 (new \Xt\Tools\XtCosTools($bucket,$argv));
脚本文件请在cli下运行
-R [文件夹名称] 删除文件夹下所有文件包括文件夹 -r [文件名称] 删除指定文件 -dl [文件夹名称] [输出的文件夹] 将cos指定文件夹资源下载到指定文件夹(根目录为/) -up [本地文件或文件夹名称] [cos上的文件夹(默认根目录)] 将指定文件或文件夹上传到cos上的文件夹内 -l [文件夹名称] 获取指定文件夹下的文件(根目录为/) -h 详细的说明
sudo php run.php -l / 列出这个bucket的文件列表 sudo php run.php -l /js/ 列出这个bucket下的js文件夹的所有列表 sudo php run.php -R / 删除整个cos对象储存文件列表 sudo php run.php -R /js/ 删除cos下的js文件夹所有文件包括文件夹 sudo php run.php -r 1.txt 删除cos下的1.txt文件 sudo php run.php -dl / 将整个cos下载到当前文件夹 sudo php run.php -dl /js/ 将cos下的js文件夹所有文件下载到当前目录的./js/文件夹内 sudo php run.php -dl /js/ ./download/ 将cos下的js文件夹所有文件下载到./download/文件夹内(download需要自己手动创建) sudo php run.php -up 将当前目录的所有文件上传到cos的根目录下 sudo php run.php -up ./file/ 将本地的./file/文件夹上传到cos根目录下 sudo php run.php -up ./file/ /upload/ 将本地的./file/文件夹上传到cos下的/upload/文件内(upload会自动创建) sudo php run.php -up ./1.txt 将本地的./1.txt文件上传到cos根目录 sudo php run.php -up ./1.txt /upload/ 将本地的./1.txt文件上传到cos下的/upload/文件夹内(upload会自动创建)
最后六一儿童节快乐啊(最近发现好喜欢写php脚本...)
1条评论登录后可见