腾讯对象储存cos一键下载、上传、删除辅助脚本
- 2017-05-31 16:42:22
- 幻音い
- 6314
温馨提示: 这篇文章于2713天前编写,现在可能不再适用或落后.
用过腾讯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下配置一下申请的秘钥.
然后脚本文件如下:XtCosTools.class.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脚本...)
阁下需要登录后才可以查看评论哦~