首先,阿里云oss是什么?

aliyunlogo.jpgstudy.jpg

oss 也叫对象存储,用来存放图片,css、视频等静态文件。可以作为网站、app等web应用的:附件服务器、头像服务器、图片服务 器、下载服务器。
每家叫法不一样,阿里云叫oss,腾讯云叫cos,其实都是一个东西。

注意事项

  1. 创建Bucket本身不收取任何费用,仅收取上传至Bucket中Object的存储费用或者访问Object产生的流量费用等。
  2. Bucket一旦创建,则无法更改其名称及所在地域。
  3. Bucket容量弹性扩展,您无需提前购买容量。

第一步:

我们来说下从创建阿里云oss的bucket创建,如图所示:
登录阿里云账号后,左边菜单栏产品与服务->存储与CDN->对象存储OSS。
oss.jpg

第二步

找到按钮,
create.jpg

第三步-填写配置参数

bucket.jpg
1.Bucket名称

  1. 所选定的存储空间名称在阿里云OSS的所有现有存储空间名称中必须具有唯一性。
  2. 只能包括小写字母、数字和短划线(-)。
  3. 必须以小写字母或者数字开头和结尾。
  4. 长度必须在3~63字节之间。

2.地域

Bucket的数据中心。 如需通过ECS内网访问OSS,请选择与您ECS相同的地域。

3.Endpoint
这里说下,bucket和endpoint的关系,阿里云oss路径访问域名结构:Bucket.Endpoint。Bucket为您的存储空间名称就是第一步你填写的bucket名称,Endpoint为存储空间对应的地域域名。endpoint的结构也会随着你选择的地域而变化。

示例:如果您的Region为华东1(杭州),Bucket名称为examplebucket,Object访问路径为example/example.txt,那么您的
外网访问地址为https://examplebucket.oss-cn-hangzhou.aliyuncs.com/example/example.txt

4.存储类型
选择标准即可
5.版本控制
开通当然是好的,但是收费哦!自己斟酌吧。
6.读写权限
根据自己情况定吧。
7.服务端加密方式
说实话,我这个博客没啥重要的,读写权限我选择私人,其实再加密不加密的,没啥了,但是从安全角度考虑,必然是加密,不懂这些加密方式的,可直接选择oss完全托管->AES256即可。足够使用就可以了。
8.实时日志查询

OSS 与日志服务深度结合,免费提供最近 7 天内的 OSS 实时日志查询(限额 900 GB/天的日志写入额度,超出部分由日志服务
单独收费。假设一条日志为1 KB,约为 9 亿条)。开通该功能后,您可对 Bucket 的访问记录进行实时查询分析

有需要的就开通呗,收费哦。其实就是帮你分析那个图片访问量大。
9.备份
记住,云上的东西,逢开通必收费,切记。

混合云备份服务为 OSS 提供数据处理保护,防止误修改、误删除,可低成本长期保存历史数据,服务首次开通后 30 天内免费用

最后一步: PHP上传阿里云

 /**
     * 阿里云OSS图片上传
     * @$ossUploadPath,设置要上传到oss的某个目录
     * @return array
     */
    public function upload($ossUploadPath = 'upload/image'){
        // if(Request::has($base64Key,'post')){
        if($_POST){
            foreach($_POST as $base64Image){
                $result = $this->base64_upload($base64Image);
                if ($result['code'] === RENDER_CODE_SUCCESS){
                    $fileResult = &$result['data'];
                    $filePath = $fileResult['path'] . $fileResult['name'];
                    $ossFileName = implode('/', [$ossUploadPath,date('Ymd'),$fileResult['name']]);
                    try {
                        $config = config('api.aliyun_oss');
                        $ossClient = new OssClient($config['key_id'], $config['key_secret'], $config['endpoint']);
                        $result = $ossClient->uploadFile($config['bucket'], $ossFileName, $filePath);
                        /*组合返回数据*/
                        $arr = [
                            'oss_url' => $result['info']['url'],  //上传成功后返回的该图片的oss地址
                            'relative_path' => $ossFileName     //数据库保存名称(相对路径)
                        ];
                    } catch (OssException $e) {
                        return render(RENDER_CODE_FAIL, $e->getCode() . $e->getMessage());
                    }finally {
                        unlink($filePath);
                    }
                    return render(RENDER_CODE_SUCCESS, '成功',['path' => $arr['oss_url']]);
                }
                return render(RENDER_CODE_FAIL, $result['msg']);
            }
            
        }else{
            if($_FILES){
                $fileAll = $_FILES;
                foreach($fileAll as $file){
                    if($file['error']===0){
                        $name = $file['name'];
                        $format = strrchr($name, '.');//截取文件后缀名如 (.jpg)
                        /*判断图片格式*/
                        $allow_type = ['.jpg', '.jpeg', '.gif', '.bmp', '.png'];
                        if (!in_array($format, $allow_type)) {
                            return render(RENDER_CODE_FAIL, '文件格式不在允许范围内哦');
                        }
                        // 尝试执行
                        try {
                            $config = config('api.aliyun_oss');
                            //print_r($config);die;
                            //实例化对象 将配置传入
                            $ossClient = new OssClient($config['key_id'], $config['key_secret'], $config['endpoint']);
                            //这里是有sha1加密 生成文件名 之后连接上后缀
                            $fileName = $ossUploadPath.'/' . date("Ymd") . '/' . sha1(date('YmdHis', time()) . uniqid()) . $format;
                            //执行阿里云上传
                            $result = $ossClient->uploadFile($config['bucket'], $fileName, $file['tmp_name']);
                            /*组合返回数据*/
                            $arr = [
                                'oss_url' => $result['info']['url'],  //上传资源地址
                                'relative_path' => $fileName     //数据库保存名称(相对路径)
                            ];
                        } catch (OssException $e) {
                            return $e->getMessage();
                        }
                        //将结果返回
                        return render(RENDER_CODE_SUCCESS, '成功上传到oss', ['file_url' => $arr['oss_url']]);
                    }
                    return render(RENDER_CODE_FAIL, '文件不存在');
                }
            }
        }
        
    }

 /**
     * 将Base64数据转换成二进制并存储到指定路径
     * @param        $base64
     * @param string $path
     *
     * @return array
     */
    private function base64_upload($base64, $local_path = './upload/temp/') {
        $data = explode(',',$base64);
        trace($data,'api');
        unset($base64);
        if (count($data) !== 2){
            return render(RENDER_CODE_FAIL,'文件格式错误');
        }
        if (preg_match('/^(data:\s*image\/(\w+);base64)/', $data[0], $result)){
             /*判断图片格式*/
            $allow_type = ['.jpg', '.jpeg', '.gif', '.bmp', '.png'];
            if (!in_array($result[2], $allow_type)) {
                return render(RENDER_CODE_FAIL, '文件格式不在允许范围内哦');
            }
            $image_name = md5(uniqid()).'.'.$result[2];
            $image_path = $local_path;
            $image_file = $image_path . $image_name;
            if(!file_exists($image_path)){
                mkdir($image_path, 0777, true); 
            }
            //服务器文件存储路径
            try {
                if (file_put_contents($image_file, base64_decode($data[1]))) {
                    return render(RENDER_CODE_SUCCESS, '成功', ['name' => $image_name, 'path' => $image_path]);
                } else {
                    return render(RENDER_CODE_FAIL, '文件保存失败');
                }
            }catch (\Exception $e){
                return render(RENDER_CODE_FAIL,$e->getMessage());
            }
        }
        return render(RENDER_CODE_FAIL,'文件格式错误');
    }
最后修改:2021 年 05 月 26 日 08 : 50 AM
如果觉得我的文章对你有用,请随意赞赏