开发者社区 问答 正文

ThinkPHP 5使用OSS



准备工作

  • 登录阿里云官网,将鼠标移至产品找到并单击对象存储OSS打开OSS产品详情页面。
  • OSS产品详情页中的单击立即开通。
  • 开通服务后,在OSS产品详情页面单击管理控制台直接进入OSS管理控制台界面。您也可以单击位于官网首页右上方菜单栏的控制台,进入阿里云管理控制台首页,然后单击左侧的对象存储OSS菜单进入OSS管理控制台界面。
  • 点击右上角access key按钮,进入子页面点击创建access key按钮,创建成功后获取Access Key ID 和 Access Key Secret 。


安装OSS PHP SDK


关于安装OSS PHP SDK的方法,请参看 官网。对于Thinkphp 5,推荐通过 composer 方式管理项目依赖。
打开命令行,切换到项目根目录,输入以下命令
composer require aliyuncs/oss-sdk-php

如果一直下载不成功,请在composer reauire之前加入composer中国镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com

同时,您的项目下的 vendor 文件夹内,也将新建 aliyuncs 文件夹,里面的文件就是OSS库文件及示例文件。


填写配置项


文件 application/config.php
//阿里云OSS配置'aliyun_oss' => ['KeyId'      => ’’,  //您的Access Key ID'KeySecret'  => '',  //您的Access Key Secret'Endpoint'   => '',  //oss endpoint],


实例化OSS


文件 application/common.php

  • 引入OSS
    use think\Request;use OSS\OssClient;use think\Config;use OSS\Core\OssException;

  • 实例化OSS
    $config = Config::get('aliyun_oss');Request::instance()->ossClient= new OssClient($config['KeyId'], $config['KeySecret'], $config['Endpoint']);


控制器中调用OSS


文件 application/Index/controller/Index.php
public function index()
{
    $config = config('aliyun_oss');
    //获取oss实例
    $ossClient = request()->ossClient;
    $bucket = '<填写您的bucket名称>';
    $object = '<填写您的object名称>';

    //创建bucket
    $ossClient->createBucket($bucket);
    //创建object
    $ossClient->putObject($config['Bucket'], $object, 'object content');
    //获取object内容
    $object = $ossClient->getObject($config['Bucket'], $object);
    //删除object
    $ossClient->deleteObject($bucket, $object);
    //删除bucket
    $ossClient->deleteBucket($bucket);
}


展开
收起
福利达人 2018-05-09 11:37:42 2696 分享 版权
阿里云 AI 助理回答

您已经成功概述了在ThinkPHP 5框架中集成阿里云对象存储OSS的整个流程,包括开通服务、获取Access Key、安装OSS PHP SDK、配置项填写、实例化OSS客户端以及在控制器中调用OSS进行基本操作的方法。这里我补充一些细节和可能需要调整的地方,以确保您的应用能够顺利运行。

填写配置项

确保application/config.php中的配置是正确的,特别是Endpoint需要根据您创建的OSS服务所在的区域来确定。例如,对于华东1(杭州)区域,Endpoint应为'http://oss-cn-hangzhou.aliyuncs.com'。如果是使用国内站内网访问优化,可以使用对应的内网地址。

// 阿里云OSS配置
'aliyun_oss' => [
    'KeyId'      => '<YourAccessKeyId>', 
    'KeySecret'  => '<YourAccessKeySecret>',
    'Endpoint'   => 'http://oss-cn-hangzhou.aliyuncs.com', // 根据实际情况调整
    'Bucket'     => '<YourBucketName>' // 可以在这里预先定义Bucket名称
],

实例化OSS

application/common.php中,您已经正确地引入了必要的类并实例化了OSSClient。但请注意,直接从Request实例中挂载OSSClient是一种做法,也可以考虑使用依赖注入等更面向对象的方式。不过,基于您的示例,这是可行的。

控制器中调用OSS

Index.php控制器的index方法中,有几个地方需要注意:

  • 确保$bucket变量有值,通常这个值应该从配置中获取,而不是空字符串。
  • putObject方法的第二个参数应该是具体的文件名或路径(即$object),而非空字符串。
  • 在实际应用中,上传文件时,您可能需要读取本地文件内容,而不是像示例中的 'object content' 这样的字符串。
  • 删除操作(deleteObjectdeleteBucket)应当谨慎执行,特别是在生产环境中,因为这会导致数据永久丢失。建议在确认无误后再执行这些操作。

修正后的示例代码片段:

public function index()
{
    $config = config('aliyun_oss');
    $ossClient = request()->ossClient;
    $bucket = $config['Bucket']; // 确保bucket名称已定义
    $object = 'example.txt'; // 示例对象名

    try {
        // 创建bucket(如果尚未创建)
        if (!$ossClient->doesBucketExist($bucket)) {
            $ossClient->createBucket($bucket);
        }
        
        // 准备文件内容,这里假设是读取一个本地文件
        $localFile = './path/to/your/local/file.txt';
        $content = file_get_contents($localFile);
        
        // 上传文件到OSS
        $ossClient->putObject($bucket, $object, $content);
        
        // 获取并输出object内容(可选)
        $result = $ossClient->getObject($bucket, $object);
        echo $result->getContent();
        
        // 注意:以下删除操作请谨慎执行
        // $ossClient->deleteObject($bucket, $object);
        // $ossClient->deleteBucket($bucket); // 空Bucket才能删除
    } catch (OssException $e) {
        print $e->getMessage();
    }
}

请根据实际需求调整上述代码,并确保在执行任何删除操作前做好数据备份。希望这些建议能帮助您更好地集成阿里云OSS服务。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答