• PHP使用阿里云对象存储oss


    目录

    1.使用composer安装依赖

    2.编写代码

    3.调用

    4.遇到问题

    (1) 上传成功 访问发现没有权限

    (2) 接着访问,发现直接下载

    (3) 上传文件 发现文件内容是空

    5.自定义域名上传文件

    (1) 配置:

    (2) 代码修改


    1.使用composer安装依赖

    composer require aliyuncs/oss-sdk-php

    目录结构如下:

    2.编写代码

    1. /*
    2. * 阿里云oss对象文件存储
    3. */
    4. require_once __DIR__ . '/vendor/autoload.php';
    5. use OSS\OssClient;
    6. use OSS\Core\OssException;
    7. class OssHandle
    8. {
    9. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com创建RAM账号。
    10. private static $accessKeyId = "你的AccessKey";
    11. private static $accessKeySecret = "你的 AccessKeySecret";
    12. // Endpoint按实际情况填写
    13. private static $endpoint = "你的bucket外网域名";
    14. protected static $client;
    15. public function __construct()
    16. {
    17. self::$client = $this->getOssClient();
    18. }
    19. /**
    20. * 设置Oss client
    21. * @return OssClient|string
    22. */
    23. protected function getOssClient()
    24. {
    25. try {
    26. return new OssClient(self::$accessKeyId, self::$accessKeySecret, self::$endpoint);
    27. } catch (OssException $e) {
    28. print_r($e->getMessage());
    29. return '';
    30. }
    31. }
    32. /**
    33. * 创建bucket
    34. * @param $bucketName
    35. * @return null
    36. */
    37. public function createBucket($bucketName)
    38. {
    39. return self::$client->createBucket($bucketName);
    40. }
    41. /**
    42. * 上传文件到oss
    43. * @param $bucketName
    44. * @param $fileName :文件夹及文件名称
    45. * @param $local_file :本地文件路径
    46. * @return null
    47. */
    48. public function uploadOssFile($bucketName, $fileName, $local_file)
    49. {
    50. // $fileName 表示上传文件到OSS时需要指定包含文件后缀,不包含Bucket名称在内的完整路径,例如abc/efg/123.jpg。
    51. try {
    52. return self::$client->uploadFile($bucketName, $fileName, $local_file);
    53. } catch (OssException $e) {
    54. print_r($e->getMessage());
    55. return '';
    56. }
    57. }
    58. /**
    59. * 删除oss文件
    60. * @param $bucketName
    61. * @param $fileName
    62. * @return string|null
    63. */
    64. public function delOssFile($bucketName, $fileName)
    65. {
    66. // $fileName 表示删除OSS文件时需要指定包含文件后缀,不包含Bucket名称在内的完整路径,例如abc/efg/123.jpg
    67. try {
    68. return self::$client->deleteObject($bucketName, $fileName);
    69. } catch (OssException $e) {
    70. print_r($e->getMessage());
    71. return '';
    72. }
    73. }
    74. }

    3.调用

    1. require_once 'OssHandle.php';
    2. $obj = new OssHandle();
    3. // fileName 除bucket名称外 包含文件路径(文件夹)和文件名称
    4. // local_file 绝对地址 或相对地址
    5. $info = $obj->uploadOssFile('你的bucket', 'uploads/other/1.jpg', '../images/1.jpg');
    6. print_r($info);
    7. // fileName 除bucket名称外 包含文件路径(文件夹)和文件名称
    8. $bool = $obj->delOssFile('你的bucket', 'uploads/other/2.jpg');
    9. print_r($bool);

    4.遇到问题

    (1) 上传成功 访问发现没有权限

    提示:AccessDenied You have no right to access this object because of bucket acl.

    解决 修改权限

    (2) 接着访问,发现直接下载

    解决:

    配置自定义域名解析

    在访问后,问题解决

    (3) 上传文件 发现文件内容是空

    额 原来是用了字符串上传方式 “putObject”

    换成文件上传方式“uploadFile”后解决

    5.自定义域名上传文件

    (1) 配置:

    参考上面自定义域名解析

    (2) 代码修改

    如下:

    1. // Endpoint按实际情况填写
    2. private static $endpoint = "http://oss.solveset.net";
    3. //private static $endpoint = "http://oss-cn-beijing.aliyuncs.com";
    4. /**
    5. * 设置Oss client
    6. * @return OssClient|array
    7. */
    8. protected function getOssClient()
    9. {
    10. # true为开启CNAME。CNAME是指将自定义域名绑定到存储空间上
    11. return new OssClient(self::$accessKeyId, self::$accessKeySecret, self::$endpoint, true);
    12. }

    最后,上传完成。

     

  • 相关阅读:
    一种结合白平衡统计信息和曝光信息的软光敏算法专利学习(专利三)
    刷题记录(NC13822 Keep In Line,NC16663 合并果子,NC16430 蚯蚓)
    【设计模式】2.工厂模式
    github上star较多的三个c++ 内存池memory pool分析
    英语——分享篇——每日200词——1601-1800
    windows Python3.5.4 环境安装sqlalchemy出现no attribute ‘sort‘
    CV12_ONNX转RKNN模型(谛听盒子)
    Linux免密登录——A登录B密钥设置(SSH SCP)
    Web前端大作业—电影网页介绍8页(html+css+javascript) 带登录注册表单
    docker <容器数据卷 -v > -- 对容器内数据持久化(备份)
  • 原文地址:https://blog.csdn.net/json_ligege/article/details/127924626