OSS.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. if(($storageName = Cache::get('storageName')) && ($uploadUrl = Cache::get('uploadUrl')) && ($accessKey = Cache::get('accessKey')) && ($secretKey = Cache::get('secretKey'))){
  27. self::$accessKey = $accessKey;
  28. self::$secretKey = $secretKey;
  29. self::$uploadUrl = $uploadUrl;
  30. self::$storageName = $storageName;
  31. }else{
  32. self::$accessKey = trim(SystemConfigService::get('accessKey'));
  33. self::$secretKey = trim(SystemConfigService::get('secretKey'));
  34. self::$uploadUrl = trim(SystemConfigService::get('uploadUrl')).'/';
  35. self::$storageName = trim(SystemConfigService::get('storage_name'));
  36. Cache::set('accessKey',self::$accessKey);
  37. Cache::set('secretKey',self::$secretKey);
  38. Cache::set('uploadUrl',self::$uploadUrl);
  39. Cache::set('storageName',self::$storageName);
  40. }
  41. if(!self::$accessKey || !self::$secretKey || !self::$uploadUrl || !self::$storageName){
  42. exception('请设置 secretKey 和 accessKey 和 空间域名 和 存储空间名称');
  43. }
  44. if(self::$auth == null) {
  45. self::$auth = new OssClient(self::$accessKey,self::$secretKey,self::$uploadUrl);
  46. if(!self::$auth->doesBucketExist(self::$storageName)) self::$auth->createBucket(self::$storageName,self::$auth::OSS_ACL_TYPE_PUBLIC_READ_WRITE);
  47. }
  48. return self::$auth;
  49. }
  50. /**
  51. * TODO 文件上传 名称
  52. * @param string $filename
  53. * @return string
  54. */
  55. public static function uploadImage($filename = 'image'){
  56. $request = app('request');
  57. $file = $request->file($filename);
  58. $filePath = $file->getRealPath();
  59. $ext = $file->getOriginalExtension();
  60. $key = substr(md5($file->getRealPath()) , 0, 5). date('YmdHis') . rand(0, 9999) . '.' . $ext;
  61. try{
  62. self::autoInfo();
  63. return self::$auth->uploadFile(self::$storageName,$key,$filePath);
  64. }catch (OssException $e){
  65. return $e->getMessage();
  66. }
  67. }
  68. /**
  69. * TODO 文件上传 内容
  70. * @param $key
  71. * @param $content
  72. * @return string
  73. */
  74. public static function uploadImageStream($key, $content){
  75. try{
  76. self::autoInfo();
  77. return self::$auth->putObject(self::$storageName,$key,$content);
  78. }catch (OssException $e){
  79. return $e->getMessage();
  80. }
  81. }
  82. /**
  83. * TODO 删除资源
  84. * @param $key
  85. * @return mixed
  86. */
  87. public static function delete($key){
  88. try {
  89. self::autoInfo();
  90. return self::$auth->deleteObject(self::$storageName,$key);
  91. } catch (OssException $e) {
  92. return $e->getMessage();
  93. }
  94. }
  95. }