问题:当调用七牛删除资源接口后,因为有CDN缓存,如果在后台设置CDN缓存的时间过长,资源就会一直存在,要调用CDN接口刷新。
七牛vendor包:qiniu/php-sdk
参考:https://developer.qiniu.com/kodo/1241/php
PHP代码:
<?php
use Qiniu\Auth;
use Qiniu\Config;
use Qiniu\Storage\BucketManager;
use Qiniu\Cdn\CdnManager;
class Test
{
// 处理逻辑
public function demo()
{
$bucket = config('qiniu.public.bucket');
$accessKey = config('qiniu.public.accessKey');
$secretKey = config('qiniu.public.secretKey');
$auth = new Auth($accessKey, $secretKey);
$config = new Config();
// 详细文件名,要写全路径
$key = "test.jpg";
// 删除指定资源
// 参考文档:https://developer.qiniu.com/kodo/api/1257/delete
$bucketManager = new BucketManager($auth, $config);
list ($ret, $error) = $bucketManager->delete($bucket, $key);
//var_dump($ret);
//var_dump($error);
if ($error != null) {
// \Qiniu\Http\Error类的response属性是私有的,需要做反射处理才能访问
// 获取反射类及反射属性
$ref_error = new \ReflectionClass('\Qiniu\Http\Error');
// 获取私有属性
$property = $ref_error->getProperty("response");
// 设置属性可访问
$property->setAccessible(true);
// 注意:只能通过 ReflectionProperty 实例的 getValue 方法访问
$response = $property->getValue($error);
$error_message = $response->error;
var_dump($error_message);
exit;
}
// 刷新CDN
// 参考文档:http://developer.qiniu.com/article/fusion/api/refresh.html
// 文件完整地址
$urls = array(
"https://xxx.com/test.jpg",
);
$cdnManager = new CdnManager($auth);
list ($refreshResult, $refreshErr) = $cdnManager->refreshUrls($urls);
//var_dump($refreshResult);
//var_dump($refreshErr);exit;
if ($refreshErr != null) {
// 报错
var_dump($refreshErr);
} else {
var_dump($refreshResult['code']);
}
exit;
}
}