PHP 使用 OSS 批量删除图片

  • 2018-08-23
  • 5497
PHP   OSS  

1、控制器 OssImageController.php(不必关注此层)

  1. <?php
  2. declare(strict_types = 1);
  3. namespace app\controllers;
  4. use app\services\OssImageService;
  5. class OssImageController extends BaseController
  6. {
  7. /**
  8. * oss 批量删除图片
  9. *
  10. * @throws null
  11. */
  12. public function actionDelImage()
  13. {
  14. $data = OssImageService::service()->batchDelImage($this->params);
  15. $this->response([], $data['status'], $data['msg']);
  16. }
  17. }

 
2、service 层 OssImageService.php(业务实现层)

  1. <?php
  2. declare(strict_types = 1);
  3. namespace app\services;
  4. use app\extensions\AliOss;
  5. use app\extensions\Helper;
  6. class OssImageService extends BaseService
  7. {
  8. /**
  9. * 批量删除oss图片
  10. *
  11. * @param array $params
  12. * @return array
  13. * @throws null
  14. */
  15. public function batchDelImage(array $params)
  16. {
  17. /*$params['images'] = [
  18. 'https://hk-server.oss-cn-hongkong.aliyuncs.com/blog/article-in/2018-08-23/010494376.jpg',
  19. 'https://hk-server.oss-cn-hongkong.aliyuncs.com/blog/article-in/2018-08-23/011832527.jpg'
  20. ];*/
  21. if (!isset($params['images']) || empty($params['images'])) {
  22. return Helper::msg(0, '请选择需要删除的图片');
  23. }
  24. if (!is_array($params['images'])) {
  25. return Helper::msg(0, '删除图片格式错误,请传数组格式');
  26. }
  27. $ossHttpUrl = 'https://'.AliOss::bucket.'.'.AliOss::endpoint.'/';
  28. $ossHttpsUrl = 'http://'.AliOss::bucket.'.'.AliOss::endpoint.'/';
  29. $objectArray = $params['images'];
  30. // 将每一个链接的协议+bucketName+endpoint替换成'' (即去掉这部分string)
  31. foreach ($objectArray as &$v) {
  32. $v = str_replace($ossHttpUrl, '', $v);
  33. $v = str_replace($ossHttpsUrl, '', $v);
  34. }
  35. $ossClient = AliOss::getOssClient();
  36. $bucketName = AliOss::getBucketName();
  37. // 执行批量删除
  38. $ossClient->deleteObjects($bucketName, $objectArray);
  39. return Helper::msg(1, '删除素材图片成功');
  40. }
  41. }

 
3、说明

虽然阿里云 oss 提供了批量删除文件的方法,但这里仍然不建议使用,因为存在着操作风险,建议删除文件的操作还是在控制台手动操作。  

 



Top