Oss.php 4.5 KB

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