OSS.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace crmeb\services\storage;
  3. use crmeb\services\SystemConfigService;
  4. use OSS\Core\OssException;
  5. use OSS\OssClient;
  6. use think\facade\Cache;
  7. /**
  8. * 阿里云OSS上传
  9. * Class OSS
  10. */
  11. class OSS
  12. {
  13. protected static $accessKey;
  14. protected static $secretKey;
  15. protected static $auth = null;
  16. //TODO 空间域名 Domain
  17. protected static $uploadUrl;
  18. //TODO 存储空间名称 公开空间
  19. protected static $storageName;
  20. /**
  21. * TODO 初始化
  22. * @return null|OssClient
  23. * @throws \OSS\Core\OssException
  24. */
  25. protected static function autoInfo()
  26. {
  27. if (($storageName = Cache::get('storageName')) && ($uploadUrl = Cache::get('uploadUrl')) && ($accessKey = Cache::get('accessKey')) && ($secretKey = Cache::get('secretKey'))) {
  28. self::$accessKey = $accessKey;
  29. self::$secretKey = $secretKey;
  30. self::$uploadUrl = $uploadUrl;
  31. self::$storageName = $storageName;
  32. } else {
  33. self::$accessKey = trim(sys_config('accessKey'));
  34. self::$secretKey = trim(sys_config('secretKey'));
  35. self::$uploadUrl = trim(sys_config('uploadUrl')) . '/';
  36. self::$storageName = trim(sys_config('storage_name'));
  37. Cache::set('accessKey', self::$accessKey);
  38. Cache::set('secretKey', self::$secretKey);
  39. Cache::set('uploadUrl', self::$uploadUrl);
  40. Cache::set('storageName', self::$storageName);
  41. }
  42. if (!self::$accessKey || !self::$secretKey || !self::$uploadUrl || !self::$storageName) {
  43. exception('请设置 secretKey 和 accessKey 和 空间域名 和 存储空间名称');
  44. }
  45. if (self::$auth == null) {
  46. self::$auth = new OssClient(self::$accessKey, self::$secretKey, self::$uploadUrl);
  47. if (!self::$auth->doesBucketExist(self::$storageName)) self::$auth->createBucket(self::$storageName, self::$auth::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
  48. }
  49. return self::$auth;
  50. }
  51. /**
  52. * TODO 文件上传 名称
  53. * @param string $filename
  54. * @return string
  55. */
  56. public static function uploadImage($filename = 'image')
  57. {
  58. $request = app('request');
  59. $file = $request->file($filename);
  60. $filePath = $file->getRealPath();
  61. $ext = $file->getOriginalExtension();
  62. $key = substr(md5($file->getRealPath()), 0, 5) . date('YmdHis') . rand(0, 9999) . '.' . $ext;
  63. try {
  64. self::autoInfo();
  65. return self::$auth->uploadFile(self::$storageName, $key, $filePath);
  66. } catch (OssException $e) {
  67. return $e->getMessage();
  68. }
  69. }
  70. /**
  71. * TODO 文件上传 内容
  72. * @param $key
  73. * @param $content
  74. * @return string
  75. */
  76. public static function uploadImageStream($key, $content)
  77. {
  78. try {
  79. self::autoInfo();
  80. return self::$auth->putObject(self::$storageName, $key, $content);
  81. } catch (OssException $e) {
  82. return $e->getMessage();
  83. }
  84. }
  85. /**
  86. * TODO 删除资源
  87. * @param $key
  88. * @return mixed
  89. */
  90. public static function delete($key)
  91. {
  92. try {
  93. self::autoInfo();
  94. return self::$auth->deleteObject(self::$storageName, $key);
  95. } catch (OssException $e) {
  96. return $e->getMessage();
  97. }
  98. }
  99. }