PHP使用阿里云对象存储oss

目录

1.使用composer安装依赖

2.编写代码

3.调用

4.遇到问题

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

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

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

5.自定义域名上传文件

(1) 配置:

(2) 代码修改


1.使用composer安装依赖

composer require aliyuncs/oss-sdk-php

目录结构如下:

2.编写代码

<?php
/*
 * 阿里云oss对象文件存储
 */

require_once __DIR__ . '/vendor/autoload.php';

use OSS\OssClient;
use OSS\Core\OssException;

class OssHandle
{
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com创建RAM账号。
    private static $accessKeyId = "你的AccessKey";

    private static $accessKeySecret = "你的 AccessKeySecret";

    // Endpoint按实际情况填写
    private static $endpoint = "你的bucket外网域名";

    protected static $client;

    public function __construct()
    {
        self::$client = $this->getOssClient();
    }

    /**
     * 设置Oss client
     * @return OssClient|string
     */
    protected function getOssClient()
    {
        try {
            return new OssClient(self::$accessKeyId, self::$accessKeySecret, self::$endpoint);
        } catch (OssException $e) {
            print_r($e->getMessage());
            return '';
        }
    }

    /**
     * 创建bucket
     * @param $bucketName
     * @return null
     */
    public function createBucket($bucketName)
    {
        return self::$client->createBucket($bucketName);
    }

    /**
     * 上传文件到oss
     * @param $bucketName
     * @param $fileName :文件夹及文件名称
     * @param $local_file :本地文件路径
     * @return null
     */
    public function uploadOssFile($bucketName, $fileName, $local_file)
    {
        // $fileName 表示上传文件到OSS时需要指定包含文件后缀,不包含Bucket名称在内的完整路径,例如abc/efg/123.jpg。
        try {
            return self::$client->uploadFile($bucketName, $fileName, $local_file);
        } catch (OssException $e) {
            print_r($e->getMessage());
            return '';
        }
    }

    /**
     * 删除oss文件
     * @param $bucketName
     * @param $fileName
     * @return string|null
     */
    public function delOssFile($bucketName, $fileName)
    {
        // $fileName 表示删除OSS文件时需要指定包含文件后缀,不包含Bucket名称在内的完整路径,例如abc/efg/123.jpg
        try {
            return self::$client->deleteObject($bucketName, $fileName);
        } catch (OssException $e) {
            print_r($e->getMessage());
            return '';
        }
    }
}

3.调用

require_once 'OssHandle.php';

$obj = new OssHandle();
// fileName 除bucket名称外 包含文件路径(文件夹)和文件名称
// local_file 绝对地址 或相对地址
$info = $obj->uploadOssFile('你的bucket', 'uploads/other/1.jpg', '../images/1.jpg');
print_r($info);

// fileName 除bucket名称外 包含文件路径(文件夹)和文件名称
$bool = $obj->delOssFile('你的bucket', 'uploads/other/2.jpg');
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) 代码修改

如下:

// Endpoint按实际情况填写
private static $endpoint = "http://oss.solveset.net";
//private static $endpoint = "http://oss-cn-beijing.aliyuncs.com";

/**
 * 设置Oss client
 * @return OssClient|array
 */
protected function getOssClient()
{
    # true为开启CNAME。CNAME是指将自定义域名绑定到存储空间上
    return new OssClient(self::$accessKeyId, self::$accessKeySecret, self::$endpoint, true);
}

最后,上传完成。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值