uploadToCloud.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. namespace app\common\library;
  3. use Aws\S3\S3Client;
  4. use think\Db;
  5. use aws\CommandInterface;
  6. use think\Exception;
  7. class uploadToCloud{
  8. protected $accessKeyId = 'C5Z60UI32XPFXWCQJ55V'; //移动附件
  9. protected $secretAccessKey = 'IXrSTXBk0NJG8xb8D6GwuQIO1iPpNxKA8WtBcCa1'; //移动附件
  10. protected $bucket = 'gyyannex'; //移动附件
  11. protected $endpoint = 'http://eos-beijing-7.cmecloud.cn'; //移动附件
  12. protected $secondAccessKeyId = 'E7JG3AP34GU5DBU9A814'; //移动大文件
  13. protected $secondSecretAccessKey = 'jbnJowBQxwlKXP9ThfcBhzo9NNJPckz3jX2hGF5a'; //移动大文件
  14. protected $secondBucket1 = 'annexjn2'; //移动大文件-存储
  15. protected $secondBucket2 = 'tempjn2'; //移动大文件-临时
  16. protected $secondEndpointDown = 'http://eos.jinan-4.cmecloud.cn'; //移动外网大文件
  17. protected $secondEndpoint = 'http://eos.jinan-4-internal.cmecloud.cn'; //移动内网大文件
  18. /*
  19. * key 存储文件路径
  20. * source_file 本地文件路径
  21. */
  22. public function upload($key,$source_file,$bucket=1,$access=1,$secret=1,$point=1)
  23. {
  24. set_time_limit(0);
  25. switch ($point)
  26. {
  27. case 2:
  28. $endpoint = $this->secondEndpoint;
  29. break;
  30. case 1:
  31. default:
  32. $endpoint = $this->endpoint;
  33. }
  34. switch ($access)
  35. {
  36. case 2:
  37. $accessKeyId = $this->secondAccessKeyId;
  38. break;
  39. case 1:
  40. default:
  41. $accessKeyId = $this->accessKeyId;
  42. }
  43. switch ($secret)
  44. {
  45. case 2:
  46. $secretAccessKey = $this->secondSecretAccessKey;
  47. break;
  48. case 1:
  49. default:
  50. $secretAccessKey = $this->secretAccessKey;
  51. }
  52. $s3 = new S3Client([
  53. 'region' => 'us-standard',
  54. 'version' => 'latest',
  55. 'endpoint' => $endpoint,
  56. 'bucket_endpoint' => false,
  57. 'credentials' => [
  58. 'key' => $accessKeyId,
  59. 'secret' => $secretAccessKey,
  60. ],
  61. ]);
  62. // $acl = 'public-read';
  63. $acl = 'private';
  64. switch ($bucket)
  65. {
  66. case 2:
  67. $bucket = $this->secondBucket1;
  68. break;
  69. case 3:
  70. $bucket = $this->secondBucket2;
  71. break;
  72. case 1:
  73. default:
  74. $bucket = $this->bucket;
  75. break;
  76. }
  77. $return = $s3->upload($bucket, $key, fopen($source_file, 'rb'), $acl);
  78. return $return;
  79. }
  80. public function down($file)
  81. {
  82. set_time_limit(0);
  83. $endpoint = $this->endpoint;
  84. $accessKeyId = $this->accessKeyId;
  85. $secretAccessKey = $this->secretAccessKey;
  86. $bucket = $this->bucket;
  87. $s3 = new S3Client([
  88. 'region' => 'us-standard',
  89. 'version' => 'latest',
  90. 'endpoint' => $endpoint,
  91. 'bucket_endpoint' => false,
  92. 'credentials' => [
  93. 'key' => $accessKeyId,
  94. 'secret' => $secretAccessKey,
  95. ],
  96. ]);
  97. $result = $s3->getObject(array(
  98. 'Bucket' => $bucket,
  99. 'Key' => 'cs/hello.txt',
  100. // 'Range' => 'bytes=0-20' // 只下载文件的前 20 个字节
  101. // 'SaveAs' => './savetolocal.txt'
  102. ));
  103. var_dump($result);die;
  104. return $result['Body'];
  105. }
  106. public function makeUrl($key,$fileType='attachment',$expires='+12 hours',$bucket='')
  107. {
  108. try
  109. {
  110. if(empty($key))
  111. {
  112. return '';
  113. }
  114. $key = ltrim($key,'/');
  115. $arr = explode('/',$key);
  116. $filename = $arr[count($arr)-1];
  117. set_time_limit(0);
  118. $endpoint = $this->endpoint;
  119. $accessKeyId = $this->accessKeyId;
  120. $secretAccessKey = $this->secretAccessKey;
  121. if(empty($bucket))
  122. {
  123. $bucket = $this->bucket;
  124. }
  125. $s3 = new S3Client([
  126. 'region' => 'us-standard',
  127. 'version' => 'latest',
  128. 'endpoint' => $endpoint,
  129. 'bucket_endpoint' => false,
  130. 'credentials' => [
  131. 'key' => $accessKeyId,
  132. 'secret' => $secretAccessKey,
  133. ],
  134. ]);
  135. $cmd = $s3->getCommand('GetObject',[
  136. 'Bucket'=>$bucket,
  137. 'Key'=>$key,
  138. 'ResponseContentDisposition'=>$fileType.';filename='.$filename
  139. ]);
  140. $result = $s3->createPresignedRequest($cmd,$expires);
  141. // 路径
  142. $return = (string)$result->getRequestTarget() ?? '';
  143. //完整url
  144. // $return = (string)$result->getUri() ?? '';
  145. return $return;
  146. }catch (Exception $e)
  147. {
  148. return '';
  149. }
  150. }
  151. // 移动云大文件获取
  152. public function makeCloudUrl($key,$fileType='attachment',$bucket='2',$expires='+12 hours')
  153. {
  154. try
  155. {
  156. if(empty($key))
  157. {
  158. return '';
  159. }
  160. $key = ltrim($key,'/');
  161. $arr = explode('/',$key);
  162. $filename = $arr[count($arr)-1];
  163. set_time_limit(0);
  164. $endpoint = $this->secondEndpointDown;
  165. $accessKeyId = $this->secondAccessKeyId;
  166. $secretAccessKey = $this->secondSecretAccessKey;
  167. switch ($bucket)
  168. {
  169. case 2:
  170. $bucket = $this->secondBucket1;
  171. break;
  172. case 3:
  173. $bucket = $this->secondBucket2;
  174. break;
  175. case 1:
  176. default:
  177. $bucket = $this->bucket;
  178. break;
  179. }
  180. $s3 = new S3Client([
  181. 'region' => 'us-standard',
  182. 'version' => 'latest',
  183. 'endpoint' => $endpoint,
  184. 'bucket_endpoint' => false,
  185. 'credentials' => [
  186. 'key' => $accessKeyId,
  187. 'secret' => $secretAccessKey,
  188. ],
  189. ]);
  190. $cmd = $s3->getCommand('GetObject',[
  191. 'Bucket'=>$bucket,
  192. 'Key'=>$key,
  193. 'ResponseContentDisposition'=>$fileType.';filename='.$filename
  194. ]);
  195. $result = $s3->createPresignedRequest($cmd,$expires);
  196. // 路径
  197. $return = (string)$result->getRequestTarget() ?? '';
  198. //完整url
  199. // $return = (string)$result->getUri() ?? '';
  200. return $return;
  201. }catch (Exception $e)
  202. {
  203. return '';
  204. }
  205. }
  206. }