温馨提示: 这篇文章于2754天前编写,现在可能不再适用或落后.

用过腾讯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脚本...)

    阁下需要登录后才可以查看评论哦~

    随便看看

      载入中...

      正在准备穿越次元,阁下请稍等片刻~