php简单实现 远程图片 上传

 

思路:

服务器A :上传文件,获取临时路径,然后获取文件的base64 字符串 , 将base64字符串 发给服务器B

服务器B : 接受base64字符串,转码后使用 file_put_contents 添加到空文件内,即实现图片上传

 

例子这里 通过函数传参 模拟 服务器的请求

 

服务器A:

public function mainLogic()
{
    $file = $_FILES['file_obj'];
    // 获取文件信息
    $ext = pathinfo($file['name'])['extension'];
    $tmpName = $file['tmp_name'];

    try{
        $src = imgToBase64($tmpName);            // 转码base64
        $res = $this->base64_image_content($src,$ext);  // base64转码 ,上传完毕
        var_dump($res);
    }catch(\Exception $e){
        var_dump($e->getMessage());
    }
}

 

/**
 * 获取图片的Base64编码(不支持url)
 * @param $img_file // 本地图片路径
 * @return string
 */
function imgToBase64($img_file) {
    $img_base64 = '';
    if (file_exists($img_file)) {
        $app_img_file = $img_file; // 图片路径
        $img_info = getimagesize($app_img_file); // 取得图片的大小,类型等
        $fp = fopen($app_img_file, "r"); // 图片是否可读权限

        if ($fp) {
            $filesize = filesize($app_img_file);
            $content = fread($fp, $filesize);
            $file_content = chunk_split(base64_encode($content)); // base64编码

            switch ($img_info[2]) {   //判读图片类型
                case 1: $img_type = "gif";
                    break;
                case 2: $img_type = "jpg";
                    break;
                case 3: $img_type = "png";
                    break;
            }
            $img_base64 = 'data:image/' . $img_type . ';base64,' . $file_content;//合成图片的base64编码
        }
        fclose($fp);
    }
    return $img_base64; //返回图片的base64
}

 

 

服务器B:

/**
 * @param $base64_image_content  base64字符串
 * @param $ext                   图片后缀
 */
function base64_image_upload($base64_image_content,$ext){

        $path = APP_PATH.'game/public/Upload/'.date('Ymd',time())."/";

        //检查是否有该文件夹,如果没有就创建,并给予最高权限
        if(!file_exists($path)){
            mkdir($path, 0700);
        }

        $new_file = $path.time().".{$ext}";
        $content = $this->base64ToBlob($base64_image_content);

        if (file_put_contents($new_file, $content)){     // 这里相当于文件上传操作
            return '/'.$new_file;
        }else{
            return '上传失败';
        }
}

 

// base64 转 图片内容
public function base64ToBlob($base64Str)
{
    $arr = explode(',',$base64Str);
    $blobData = base64_decode(end($arr));
    return $blobData;
}

 

执行结果:

 

posted @ 2022-10-14 17:50  jaychou、  阅读(191)  评论(0编辑  收藏  举报