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;
}
执行结果: