Oss.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. namespace App\Servers\Aliyun;
  3. use OSS\OssClient;
  4. use OSS\Core\OssException;
  5. use OSS\Credentials\StaticCredentialsProvider;
  6. use App\Facades\Servers\Logs\Log;
  7. /**
  8. * 阿里oss
  9. *
  10. * @author jun
  11. */
  12. class Oss {
  13. private $ossClient;
  14. function __construct()
  15. {
  16. $accessKeyId = config('aliyun.oss.accessKeyId','');
  17. $accessKeySecret = config('aliyun.oss.accessKeySecret','');
  18. $provider = new StaticCredentialsProvider($accessKeyId,$accessKeySecret);
  19. $endpoint = 'https://'. config('aliyun.oss.endpoint','oss-cn-shenzhen') .'.aliyuncs.com';
  20. $config = array(
  21. "provider" => $provider,
  22. "endpoint" => $endpoint,
  23. "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
  24. "region"=> "cn-shenzhen"
  25. );
  26. $this->ossClient = new OssClient($config);
  27. }
  28. /**
  29. * 使用签名URL上传
  30. * @param string bucket 存储空间名称
  31. * @param string object 不包含Bucket名称在内的Object完整路径
  32. *
  33. * */
  34. function signUrl($bucket, $object,$options=['Content-Type'=>'multipart/form-data'] )
  35. {
  36. // 指定签名URL的过期时间为600s(最长可达32400s)。
  37. $timeout = 600;
  38. try {
  39. // 生成签名URL。
  40. $signedUrl = $this->ossClient->signUrl($bucket, $object, $timeout, "PUT",$options);
  41. return $signedUrl;
  42. } catch (OssException $e) {
  43. Log::error('oss/signUrl','获取签名URL上传失败,错误:'.json_encode($e->getMessage()));
  44. return false;
  45. }
  46. }
  47. /**
  48. * 上传文件
  49. * @param string file_name 文件名称
  50. * @param string bucket 存储空间名称
  51. * @param string object 填写Object完整目录路径,例如exampledir/。Object路径中不能包含Bucket名称。
  52. * @param string filePath 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
  53. *
  54. * */
  55. public function uploadFile($file_name,$filePath,$bucket="", $object=""){
  56. $bucket = $bucket ? $bucket : config('aliyun.oss.bucket','kailin-saas');
  57. try{
  58. $object = $object.'/'.date('Y').'/'.date('m').'/'.$file_name;
  59. $result = $this->ossClient->uploadFile($bucket, $object, $filePath);
  60. $httpCode = $result['info']['http_code'] ?? 0;
  61. if ($httpCode == 200) {
  62. return $result['info']['url'];
  63. }
  64. return false;
  65. }catch(OssException $e ){
  66. Log::error('oss/uploadFile','oss上传文件失败,错误:'.json_encode($e->getMessage()));
  67. return false;
  68. }
  69. }
  70. public function uploadDiyFile($filePath, $bucket="", $object="uploads/shop")
  71. {
  72. $bucket = $bucket ? $bucket : config('aliyun.oss.bucket','kailin-saas');
  73. try{
  74. //$object = $object.'/'.date('Y').'/'.date('m').'/'.'123';
  75. $result = $this->ossClient->uploadFile($bucket, $object, $filePath);
  76. $httpCode = isset($result['info']['http_code']) ? $result['info']['http_code'] : 0;
  77. if ($httpCode == 200) {
  78. return $result['info']['url'];
  79. }
  80. return false;
  81. }catch(OssException $e ){
  82. Log::error('oss/uploadFile','oss上传文件失败,错误:'.json_encode($e->getMessage()));
  83. return false;
  84. }
  85. }
  86. // 上传对象
  87. public function putObject($object,$content,$bucket="",$options = NULL){
  88. $bucket = $bucket ? $bucket : config('aliyun.oss.bucket','kailin-saas');
  89. try{
  90. //$object = $object.'/'.date('Y').'/'.date('m').'/'.'123';
  91. $result = $this->ossClient->putObject($bucket,$object,$content,$options);
  92. $httpCode = isset($result['info']['http_code']) ? $result['info']['http_code'] : 0;
  93. if ($httpCode == 200) {
  94. return $result['info']['url'];
  95. }
  96. return false;
  97. }catch(OssException $e ){
  98. Log::error('oss/putObject','oss上传文件失败,错误:'.json_encode($e->getMessage()));
  99. return false;
  100. }
  101. }
  102. }