腾讯云COS的官方工具是一个Python做的半成品,windows下安装极其困难
难以直接使用,需要通过Python安装大量依赖,这些依赖的软件或者windows版难找,或者年代久远,总之不适合工作中使用
如果对一个非长期使用Python的人来说,腾讯云的COSCMD简直就是噩梦
想删除一个文件夹,腾讯云让你难受不已,我甚至怀疑这是不是故意的?让大家的文件都没法删除,他好计费?希望我是想多了,不过我有理由相信作为国内排名靠前的公有云,腾讯是有这个财力做一个普通开发者能用的删除工具的
多喷无益,腾讯云论坛COS板块,一进去就好几个帖子都在喷,可以去看看
以下是我临时写的PHP删除文件夹,使用腾讯云COS V4 php sdk,有需要的可以看看,终于摆脱了可怕的COSCMD
需要注意,腾讯云没有说明的,但是实际使用会遇到的奇异状态
- 通过api删除目录下的全部文件后,目录会自动消失
- 某些条件下,通过后台建立的文件夹,即使目录下文件都删没了,目录依然会存在,这个需要更多测试,可能和所属地区有关,我测试了华东区是这样的,但是西南成都似乎没有这个特性
- 列出列表接口,SDK默认是20个文件,最多是199个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
| require './include.php';
use QCloud\Cos\Api;
echo "<pre>";
$bucket = 'h5';
$folder = '/test/';
$config = array( 'app_id' => '', 'secret_id' => '', 'secret_key' => '', 'region' => 'sh', 'timeout' => 60, );
date_default_timezone_set('PRC'); $cosApi = new Api($config);
if (mb_substr($folder, -1) != "/" || mb_substr($folder, 0, 1) != "/") { throw new Exception('文件夹名称必须以斜线开头结尾'); }
function listFolder($folder) { $cosApi = $GLOBALS["cosApi"]; $bucket = $GLOBALS["bucket"]; $ret = $cosApi->listFolder($bucket, $folder, 199); if ($ret["code"] != 0) { var_export($ret); throw new Exception($folder . $ret["message"]); } $data = $ret["data"]["infos"]; return $data; }
function delFile($file) { $cosApi = $GLOBALS["cosApi"]; $bucket = $GLOBALS["bucket"]; $ret = $cosApi->delFile($bucket, $file); if ($ret["code"] != 0) { var_export($ret); throw new Exception($file . $ret["message"]); } return $ret; }
function delFolder($folder) { $cosApi = $GLOBALS["cosApi"]; $bucket = $GLOBALS["bucket"]; $ret = $cosApi->delFolder($bucket, $folder); if ($ret["code"] != 0) { var_export($ret); throw new Exception($folder . $ret["message"]); } return $ret; }
function delAll($baseFolder) { $cosApi = $GLOBALS["cosApi"]; $bucket = $GLOBALS["bucket"]; $data = listFolder($baseFolder);
foreach ($data as $val) { if (isset($val["filesize"])) { $delfile = $baseFolder . $val["name"]; $res = delFile($delfile); continue; }
$delfolder = $baseFolder . $val["name"]; $res = listFolder($delfolder);
if (empty($res)) { $res = delFolder($delfolder); continue; }
delAll($delfolder); }
}
delAll($folder);
$data = listFolder($folder); if (empty($data)) { echo "删除结束"; } else { echo "有目录文件超过200个,还需要再删除一次"; }
|