阿里云对象存储 OSS 在 TP5.1 中上传文件 的实践

阿里云对象存储 OSS 在 TP5.1 中上传文件 的实践

一、 前言

  1. 鄙人是个php菜鸡,第一次接触阿里云的对象存储,仅以此文章记录下操作流程,供刚入行的朋友参考,如有叙述不妥或技术性问题,愿大家谅解;
  2. 第一次写文章,望各路大神多多指教;

二、Bucket创建

  1. 申请开通OSS之后,需要在【Bucket 管理中】创建Bucket,详细位置:控制台->对象存储OSS->Bucket 管理在这里插入图片描述
  2. 创建时只需填写Bucket名称,其他的按照提示选择就行,特别需要注意的是读写权限的选择,如果需要客户端上传文件,建议选择公共读写,我选择了私有,发现文件上传的时候虽然提示成功并且返回了url路径,但是在文件管理里找不到我上传的文件,改成公共读写后就正常了在这里插入图片描述

三、类库安装(oss-sdk-php)

使用composer下载oss-sdk-php类库;如果下载慢可以切换到 阿里云 composer 镜像

   composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

四、PHP后台代码

  1. PHP的使用,因为我的项目是前后端分离,后台接口是几个客户端的公共接口,根据场景的不同,上传的文件类型也不同,所以不好做后缀判断,便把判断留给了前台;下面代码只是我测试时候的代码,里面涉及私密的项建议大家写成配置文件;
	// 首先需要在文件头部引入两个类库
	use OSS\OssClient;
	use OSS\Core\OssException;
  1. 上传逻辑如下
    public function upload(){
        // 阿里云主账号AccessKey,在OSS控制台主页常用入口处有快速通道可以快速查看你的AccessKey ID($accessKeyId)以及Access Key Secret($accessKeySecret )
        $accessKeyId = 'LTAIFR4Fk2GUH4XRhBofcsqG';
        $accessKeySecret = '5wyj277QASDsYsScvhkpEtyM0RVztC';
        //Endpoint(地域节点)查看位置在文章下方
        $endpoint = 'http://oss-cn-beijing.aliyuncs.com';
        //创建Bucket填写的名称
        $bucket = 'yaoxifsojiang';
        //设置保存的路径(前面不要加'/',否则会出错)
        $path = 'upload/' . date('Ymd', time()) . '/';
        //下面这三项应该都知道
        $name = $_FILES['file']['name'];
        $tmp_name = $_FILES['file']['tmp_name'];
        $error = $_FILES['file']['error'];

        //过滤错误(临时测试时使用,代码写的比较简陋)
        if ($error) {
            switch ($error) {
                case 1 :
                    $error_message = '您上传的文件超过了PHP.INI配置文件中UPLOAD_MAX-FILESIZE的大小';
                    break;
                case 2 :
                    $error_message = '您上传的文件超过了PHP.INI配置文件中的post_max_size的大小';
                    break;
                case 3 :
                    $error_message = '文件只被部分上传';
                    break;
                case 4 :
                    $error_message = '文件不能为空';
                    break;
                default :
                    $error_message = '未知错误';
            }
            die($error_message);
        }
        //文件名生成
        $arr_name = explode('.', $name);
        //源文件的后缀
        $hz = array_pop($arr_name);
        //新的文件名
        $new_name = md5(time() . uniqid()) . '.' . $hz;
        //文件在OSS上的URL
        $url=$path.$new_name;
        //抛出异常
        try{
        //相比传统的操作,其实就多了两个步骤
        	//第一步是根据上面的参数实例化一个对象
            $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
            //这一步相当于之前把临时文件移入到设置的地址那步,只是以前的是自己的服务器上,现在是OSS;
            $result =$ossClient->uploadFile($bucket,$url,$tmp_name);
			//返回的参数
            if (isset($result['info']['http_code']) AND $result['info']['http_code']==200) {
                return $this->buildSuccess([
                    'fileName' => $new_name,
                    'fileUrl'  => $result['info']['url']
                ]);
            }else{
                return $this->buildFailed(ReturnCode::FILE_SAVE_ERROR, '文件上传失败');
            }
        } catch(OssException $e) {
            $msg = $e->getMessage();
            return $this->buildFailed(ReturnCode::FILE_SAVE_ERROR, $msg);
        }
    }
  1. Endpoint(地域节点)查看位置在这里插入图片描述
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值