学习使用php判断阿里云oss图片单图或批量上传、查询图片文件是否存在

学习使用php判断阿里云oss图片单图或批量上传、查询图片文件是否存在

    • doesObjectExist

doesObjectExist

主要函数doesObjectExist

/**
 * Base64上传文件
 * @param string|array $images
 * @param string $model_path
 * @param string $model_type
 * @param string $upload_path
 * @param bool $autoName
 * @return array
 */
protected function oss_base64_upload($images, $model_path = '', $model_type = 'images', $upload_path = '', $autoName = true)
{
    $accessKeyId = $this->oss_config['accessKeyId'];
    $accessKeySecret = $this->oss_config['accessKeySecret'];
    $endpoint = $this->oss_config['endpoint'];
    $bucket = $this->oss_config['bucket'];
    $isCName = true;
 
    if (empty($images)) {
        return ['Code' => 0, 'Msg' => '文件列表不能为空'];
    }
 
    $file_raw = [];
    $file_type = ['pjpeg', 'jpeg', 'jpg', 'gif', 'bmp', 'png', 'mov', '3gp', 'mp4', 'avi'];
    $preg_type = "image";
    $model_type = strtolower($model_type);
    if ($model_type == 'video') {
        $preg_type = $model_type;
    }
 
    //数组批量上传
    if (is_array($images) && count($images) > 0) {
        /*
         * $images 批量上传示例(值为一维单列或多列数组)
         * $images = [
         *      "base64/image1..........."
         *      "base64/image2..........."
         * ]
         */
 
        foreach ($images as $key => $value) {
            $value = trim($value);
            if (preg_match("/^(data:\s*$preg_type\/(\w+);base64,)/", $value, $result)) {
                $type = strtolower($result[2]);
                if (in_array($type, $file_type)) {
                    $file_raw[] = [
                        'raw' => base64_decode(str_replace($result[1], '', $value)), //文件流
                        'extension' => $type, //文件后缀
                        'index' => $key,
                    ];
                } else {
                    return ['Code' => 0, 'Msg' => '文件类型错误'];
                }
            } else {
                return ['Code' => 0, 'Msg' => '文件base64格式不合法'];
            }
        }
    }
 
    //字符串单图上传
    if (is_string($images)) {
        /*
         * $images 上传单个示例,字符串
         * $images = "base64/image..........."
         */
 
        $images = trim($images);
        if (preg_match("/^(data:\s*$preg_type\/(\w+);base64,)/", $images, $result)) {
            $type = strtolower($result[2]);
            if (in_array($type, $file_type)) {
                $file_raw[] = [
                    'raw' => base64_decode(str_replace($result[1], '', $images)), //文件流
                    'extension' => $type, //文件后缀
                    'index' => 0,
                ];
            } else {
                return ['Code' => 0, 'Msg' => '文件类型错误'];
            }
        } else {
            return ['Code' => 0, 'Msg' => '文件base64格式不合法'];
        }
    }
 
    if (empty($upload_path)) {
        $model_path = strstr('/', $model_path) ? $model_path : $model_path . '/';
        $upload_path = "{$model_type}/{$model_path}" . date('Y-m-d') . '/';
    }
 
    require_once(THINK_PATH . 'Extend/Vendor/aliyun-oss/autoload.php');
    $ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, $isCName);
 
    $photo_list = [];
    try {
        if (!empty($file_raw)) {
            foreach ($file_raw as $value) {
                $name = substr(md5(base64_encode($value['raw']) . base64_encode(time() . mt_rand(33, 126))), 8, 16);
                if ($autoName === true) {
                    $file_name = $upload_path . $name . "." . strtolower($value['extension']);
                } else {
                    $file_name = $upload_path;
                }
                $getOssInfo = $ossClient->putObject($bucket, $file_name, $value['raw']);
                $getOssPdfUrl = $getOssInfo['info']['url'];
                if ($getOssPdfUrl) {
                    $photo_list[$value['index']] = self::http_to_https($getOssPdfUrl);
                }
            }
        }
    } catch (OssException $e) {
        return ['Code' => 0, 'Msg' => $e->getMessage()];
    }
 
    return ['Code' => 1, 'Msg' => $photo_list];
}
 
/**
 * OSS内文件是否存在
 * @param string $object @文件路径
 * @return bool
 */
protected function doesObjectExist($object = '')
{
    $exist = false;
    if (empty($object)) {
        return $exist;
    }
 
    $accessKeyId = $this->oss_config['accessKeyId'];
    $accessKeySecret = $this->oss_config['accessKeySecret'];
    $endpoint = $this->oss_config['endpoint'];
    $bucket = $this->oss_config['bucket'];
    $isCName = true;
 
    require_once(THINK_PATH . 'Extend/Vendor/aliyun-oss/autoload.php');
    $ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, $isCName);
 
    try {
        $exist = $ossClient->doesObjectExist($bucket, $object);
    } catch (OssException $e) {
        $exist = false;
        //printf($e->getMessage() . "\n");
    }
 
    return $exist;
}

你可能感兴趣的:(Php,Api,学习,php,阿里云)