腾讯云 COS 对象存储 不能删除文件夹 COSCMD windows无法使用 解决办法
腾讯云COS的官方工具是一个Python做的半成品,windows下安装极其困难
难以直接使用,需要通过Python安装大量依赖,这些依赖的软件或者windows版难找,或者年代久远,总之不适合工作中使用
如果对一个非长期使用Python的人来说,腾讯云的COSCMD简直就是噩梦
想删除一个文件夹,腾讯云让你难受不已,我甚至怀疑这是不是故意的?让大家的文件都没法删除,他好计费?希望我是想多了,不过我有理由相信作为国内排名靠前的公有云,腾讯是有这个财力做一个普通开发者能用的删除工具的
多喷无益,腾讯云论坛COS板块,一进去就好几个帖子都在喷,可以去看看
以下是我临时写的PHP删除文件夹,使用腾讯云COS V4 php sdk,有需要的可以看看,终于摆脱了可怕的COSCMD
需要注意,腾讯云没有说明的,但是实际使用会遇到的奇异状态
- 通过api删除目录下的全部文件后,目录会自动消失
- 某些条件下,通过后台建立的文件夹,即使目录下文件都删没了,目录依然会存在,这个需要更多测试,可能和所属地区有关,我测试了华东区是这样的,但是西南成都似乎没有这个特性
- 列出列表接口,SDK默认是20个文件,最多是199个
require './include.php';
use QCloud\Cos\Api;
echo "<pre>";
// bucket
$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('文件夹名称必须以斜线开头结尾');
}
/**
* 列出文件,最多200个
*
* @param String $folder 文件夹路径
* @return Array COS返回的数据
*/
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;
}
/**
* 删除一个文件
*
* @param String $file 文件绝对路径
* @return Array COS返回的数据
*/
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;
}
/**
* 删除一个空目录
*
* @param String $folder 空的目录绝对路径
* @return Array COS返回的数据
*/
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;
}
/**
* 删除目录下全部文件
*
* @param String $baseFolder 要删除的目录
*/
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);
}
// 删除当前目录,测试发现COS通过API删除时,如果文件为空,将不保留文件夹,故注释
// delFolder($baseFolder);
}
delAll($folder);
$data = listFolder($folder);
if (empty($data))
{
echo "删除结束";
}
else
{
echo "有目录文件超过200个,还需要再删除一次";
// var_dump($data);
}
最后更新于 2017-10-20 12:29:58 并被添加「解决办法 对象存储 腾讯云 COS 不能删除文件夹 COSCMD」标签,已有 1055 位童鞋阅读过。
此处评论已关闭