当前位置:Gxlcms > PHP教程 > php怎么使用oss web直传

php怎么使用oss web直传

时间:2021-07-01 10:21:17 帮助过:2人阅读

本篇文章给大家介绍一下php使用oss web直传。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

前言

直传优点: 无需经过服务器,由前端直传到 oss,因此可以减少服务器带宽使用 和 加快用户上传速度。

本篇讲的这个不需要安装扩展包,仅有直传功能,是非常轻量的。

我是参考https://github.com/iiDestiny/flysystem-oss来写的,如果你需要在 php 使用其他的 oss 功能,那么扩展包更合适。

创建OssUploadSignature.php

  1. <?php
  2. namespace Service;class OssUploadSignature{
  3. private $accessKeyId;
  4. private $accessKeySecret;
  5. private $expire = 300; // 5分钟有效期
  6. private $bucketHost; // Bucket 域名
  7. private $conditions = [ // 限制
  8. [
  9. 'content-length-range', // 内容限制
  10. 0, // 最小上传
  11. 10 * 1024 * 1024 // 最大上传10m
  12. ], [
  13. 0 => 'starts-with',
  14. 1 => '$key', // 必须带key
  15. 2 => 'images/', // 如:/images 只能放在/images的路径
  16. ]
  17. ];
  18. public function setBucketHost($bucketHost)
  19. {
  20. $this->bucketHost = $bucketHost;
  21. return $this;
  22. }
  23. public function setAccessKeyId($accessKeyId)
  24. {
  25. $this->accessKeyId = $accessKeyId;
  26. return $this;
  27. }
  28. public function setAccessKeySecret($accessKeySecret)
  29. {
  30. $this->accessKeySecret = $accessKeySecret;
  31. return $this;
  32. }
  33. public function signatureConfig()
  34. {
  35. $end = time() + $this->expire;
  36. $arr = [
  37. 'expiration' => $this->gmt_iso8601($end),
  38. 'conditions' => $this->conditions,
  39. ];
  40. $base64Policy = base64_encode(
  41. json_encode($arr)
  42. );
  43. $signature = base64_encode(hash_hmac('sha1', $base64Policy, $this->accessKeySecret, true));
  44. return [
  45. 'OSSAccessKeyId' => $this->accessKeyId,
  46. 'policy' => $base64Policy,
  47. 'signature' => $signature,
  48. 'expire' => $end,
  49. 'bucketHost' => $this->bucketHost ];
  50. }
  51. // fix bug https://connect.console.aliyun.com/connect/detail/162632
  52. public function gmt_iso8601($time)
  53. {
  54. return (new \DateTime(null, new \DateTimeZone('UTC')))->setTimestamp($time)->format('Y-m-d\TH:i:s\Z');
  55. }}

运行

7b682f950e489edd72a4c7f47b1f256.png

847589f3fad7a256b7069a9980df313.png

Postman测试

7c06746477c9073a339b5402f07c75a.png

0417bc9869a076a8f6fb0a06c6a9ff3.png

小心bug

bucketHost 可以在 oss 查看。

ce6ac0e95ba08a6ca04d671f3364a95.png

复制 policy 的时候 注意是否有换行符(我都没注意…)

推荐学习:《PHP视频教程》

以上就是php怎么使用oss web直传的详细内容,更多请关注gxlcms其它相关文章!

人气教程排行