<?php
/**
 *
 *User:Administrator
 *Date:2021/10/10
 */

namespace app\common\lib\upload;

use app\api\exception\ApiException;
use OSS\Core\OssException;
use OSS\OssClient;

class AliyunOss
{
    public function Upload(){
        $name = $_FILES['file']['name'];//1.png
        $tmp_name = $_FILES['file']['tmp_name'];//C:\Users\Administrator\AppData\Local\Temp\phpD08.tmp
        $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);// [0 => "1" ,  1 => "png"]
        //源文件的后缀
        $extension = end($arr_name); //png

        /**
         * 判断上传文件是否合法
         * 判断截取上传文件名是否为
         * jpeg，jpg，png其中之一
         */
        if (!in_array($extension, array("jpeg", "jpg", "png", "PNG", "JPG", "JPEG","pdf","PDF","XLS","xls","doc","DOC","docx","xlsx"))) {
            return show(-2, '上传文件不合法');
        }

//            try {
//                validate(['file' => ['fileSize:2*1024*1024']])->check(['file' => $file]);
//            } catch (ValidateException $e) {
//                $return['msg'] = $e->getMessage();
//
//            }
        //新的文件名
        $new_name = $name;//1.png

        //文件在OSS上的URL
        $url=config('upload.aliyun_oss_save_path_syjc').$new_name;
        //抛出异常

        try{
            //相比传统的操作,其实就多了两个步骤
            //第一步是根据上面的参数实例化一个对象
            $ossClient = new OssClient(
                config('upload.aliyun_oss_accessKeyId_syjc'),
                config('upload.aliyun_oss_accessKeySecret_syjc'),
                config('upload.aliyun_oss_endpoint_syjc')
            );
            //这一步相当于之前把临时文件移入到设置的地址那步,只是以前的是自己的服务器上,现在是OSS;
            $result =$ossClient->uploadFile(config('upload.aliyun_oss_bucket_syjc'),$url,$tmp_name);
            //返回的参数
            if (isset($result['info']['http_code']) AND $result['info']['http_code']==200) {
                $arr=[
                    'fileName' => $new_name,
                    'fileUrl'  => $result['info']['url']
                ];

                return showSuccess($arr);
            }else{
                return show('3', '上传失败');
            }
        } catch(OssException $e) {
            return config($e->getCode(), $e->getMessage());
        }


    }
}