首页 > 编程语言 >php简单实现 远程图片 上传

php简单实现 远程图片 上传

时间:2022-10-14 17:55:34浏览次数:59  
标签:img image base64 content file 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;
}

 

执行结果:

 

标签:img,image,base64,content,file,php,上传,远程,图片
From: https://www.cnblogs.com/jaychou-/p/16792467.html

相关文章

  • 在远程控制中挂载虚拟光驱
     1.在iLO远程控制中,可以将本地光驱、本地文件夹、iso镜像文件映射到服务器中作光驱使用。 2.如果网络带宽小,可能提示以下连接错误,重试几次。WindowsBootManagerWindo......
  • thinkphp5.1全局验证层封装
    1.在很多场景下我们都要对表单提交的数据进行验证,那么如何实现一个验证的重复使用呢,那就让我们来封装一个全局的验证层吧!首先我们创建validate,如下图这样,我们文件夹下就出现......
  • SVN报错Skipped ‘xxxController.class.php‘ -- Node remains in conflict
    节点冲突,接下来我们更新一下节点就好。把当前节点更新为初始节点svnrevert--depth=infinityxxxController.class.php这里的xxxController.class.php就是冲突的那个文件......
  • windows server2012服务器下PHPstudy配置ssl证书(https配置)
    准备: 阿里云云服务器阿里云购买的域名(已备案、已解析phpstudy:php7.1.13nts+Apachessl证书申请(我用的是阿里云上申请的证书,好像是免费用一年吧)步骤: 申请证书(这个很多方式,......
  • THINKPHP5 事务操作
    THINKPHP5事务操作使用事务处理的话,需要数据库引擎支持事务处理。比如MySQL的MyISAM不支持事务处理,需要使用 InnoDB 引擎。自动控制事务处理Db::transaction(functio......
  • PHP 中的CURL 模拟表单的post提交
    PHP中的CURL模拟表单的post提交废话不多说啦,直接上代码:<?php$data=['username'=>'乔峰','skill'=>'擒龙手'];$headers=array('Content-Type:application/x-www-form-......
  • PHP低版本 json_encode 保留中文字符
     1.几乎所有版本可以用,而且能解决中文乱码的问题publicfunctionmainLogic(){$arr=['a'=>'测试1','b'=>'测试2',];//jso......
  • PHP爬取网站内容
    最近公司需要存在阿里云对象存储(oss)里的视频文件,而且需要18套课程的视频源文件,这周就要,我想了一下这要是一个一个找那可就麻烦了。要想想一套课程有n个章节,每个章节有n个视......
  • 远程桌面连接工具Microsoft Remote Desktop for Mac
    microsoftremotedesktopmac版,是一款运行在Mac平台上的微软远程桌面连接工具,配置连接时,允许您决定应使用的分辨率,颜色质量,全屏模式,是否要全屏启动会话,是否使用所有监视器......
  • Sentinel整合Feign对远程调用限流并降级
    微服务提供者demo-pay第一步:创建模块demo-pay添加依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifa......