您现在的位置是:首页 > 技术教程 正文

PHP实现阿里OSS文件上传

admin 阅读: 2024-03-17
后台-插件-广告管理-内容页头部广告(手机)

OSS,全称 Object Storage Service,是阿里云提供的一种海量、安全、低成本、高可靠的云存储服务。可以用来存储和处理各种非结构化数据(如图片、音频、视频、日志等)。本文主要介绍如何利用OSS进行文件上传。

可以参考下官方示例代码,然后我们按照自己需要进行修改就基本上能实现了。这里是修改后的代码,因为只需将视频上传到OSS中,而且上传后的地址也是知道的,所以就注释了上传回调相关的操作,代码如下:

  1. <?php
  2. namespace app\oss\controller;
  3. use app\common\controller\BaseController;
  4. use app\common\controller\Common;
  5. class Index extends BaseController
  6. {
  7. private $id = '';// 请填写您的AccessKeyId。
  8. private $key = '';// 请填写您的AccessKeySecret。
  9. private $host = "";// $host的格式为 bucketname.endpoint
  10. private $callbackUrl = '';
  11. function gmt_iso8601($time)
  12. {
  13. return str_replace('+00:00', '.000Z', gmdate('c', $time));
  14. }
  15. function callback()
  16. {
  17. $data = $this->getArgsList(['filename', 'mimeType', 'size', 'height', 'width']);
  18. $data['url'] = $this->host . '/' . $data['filename'];
  19. echo json_encode(Common::errorArray(0,"ok",$data));
  20. }
  21. /**
  22. * 获取oss上传信息
  23. */
  24. function getOss()
  25. {
  26. $dir = date('Ymd') . '/'; // 用户上传文件时指定的前缀。
  27. $callback_param = array(
  28. 'callbackUrl' => $this->callbackUrl,
  29. 'callbackBody' => 'filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}',
  30. 'callbackBodyType' => "application/x-www-form-urlencoded"
  31. );
  32. $callback_string = json_encode($callback_param);
  33. $base64_callback_body = base64_encode($callback_string);
  34. $now = time();
  35. $expire = 30; //设置该policy超时时间是10s. 即这个policy过了这个有效时间,将不能访问。
  36. $end = $now + $expire;
  37. $expiration = $this->gmt_iso8601($end);
  38. //最大文件大小.用户可以自己设置
  39. $condition = array(0 => 'content-length-range', 1 => 0, 2 => 1048576000);
  40. $conditions[] = $condition;
  41. // 表示用户上传的数据,必须是以$dir开始,不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录。
  42. $start = array(0 => 'starts-with', 1 => '$key', 2 => $dir);
  43. $conditions[] = $start;
  44. $arr = array('expiration' => $expiration, 'conditions' => $conditions);
  45. $policy = json_encode($arr);
  46. $base64_policy = base64_encode($policy);
  47. $string_to_sign = $base64_policy;
  48. $signature = base64_encode(hash_hmac('sha1', $string_to_sign, $this->key, true));
  49. $response = array();
  50. $response['ossaccessKeyId'] = $this->id;
  51. $response['host'] = $this->host;
  52. $response['policy'] = $base64_policy;
  53. $response['signature'] = $signature;
  54. $response['expire'] = $end;
  55. $response['callback'] = $base64_callback_body;
  56. $response['dir'] = $dir; // 这个参数是设置用户上传文件时指定的前缀。
  57. echo json_encode(Common::errorArray(0,"ok",$response));
  58. }
  59. }

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜