ThinkPHP base64上传图片


最近我们项目需要一台图片服务器存储用户上传的图片,我们使用base64处理和存储图片,下面简单介绍一下如何使用 PHP 上传图片到 服务器,并获取相应图片的返回信息 可以参考一下


ThinkPHP base64上传图片

一:图片上传判断

/**
* base64图片上传
* @param $base64_img
* @return array
*
private static function img_upload($base64_img){
$base64_img = trim($base64_img);
$up_dir = '../../../upload/images/interface/';

if(!file_exists($up_dir)){
mkdir($up_dir,0777);
}

if(preg_match('/^(data:s*image/(w+);base64,)/', $base64_img, $result)){
$type = $result[2];
if(in_array($type,array('pjpeg','jpeg','jpg','gif','bmp','png'))){
$new_file = $up_dir.date('YmdHis_').method::getRandChar().'.'.$type;
if(file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_img)))){
$img_path = str_replace('../../..', '', $new_file);
return array('code' => 1, 'msg' => "图片上传成功", 'url' => $img_path);
}
return array('code' => 2, 'msg' => "图片上传失败");
}
//文件类型错误
return array('code' => 4, 'msg' => "文件类型错误");
}
//文件错误
return array('code' => 3, 'msg' => "文件错误");
}
 二:图片上传到服务器

// 关键在这里!

$post_data = file_get_contents($realpath); // raw_post方式

// 如果是是一个数组,则content_type自动为multipart/form-data

// $post_data = array(

// 'file' => "@$realpath"

// );

$headers = array();

$headers[] = 'Content-Type:'.$ext; // 还有这里!


curl_setopt($ch, CURLOPT_URL, $zimg_upload_url);

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);


$info = curl_exec($ch);

curl_close($ch);


$json = json_decode($info, true);

$signature = $json['info']['md5'];


$imgurl = $zimg_domain . $signature;

return array('imgurl'=>$imgurl,'imgcode'=>$signature);

$post_data = file_get_contents($realpath); // raw_post方式

// 如果是是一个数组,则content_type自动为multipart/form-data

// $post_data = array(

// 'file' => "@$realpath"

// );

$headers = array();

$headers[] = 'Content-Type:'.$ext; // 还有这里!


curl_setopt($ch, CURLOPT_URL, $zimg_upload_url);

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);


$info = curl_exec($ch);

curl_close($ch);


$json = json_decode($info, true);

$signature = $json['info']['md5'];


$imgurl = $zimg_domain . $signature;

return array('imgurl'=>$imgurl,'imgcode'=>$signature);

三:判断


<code>

<code>$upFile/<code> <code>= /<code><code>$_FILES/<code><code>[/<code><code>'file'/<code><code>];/<code>

<code>/**/<code>

<code>* 创建文件夹函数,用于创建保存文件的文件夹/<code>

<code>* @param str $dirPath 文件夹名称/<code>

<code>* @return str $dirPath 文件夹名称/<code>

<code>*//<code>

<code>function/<code> <code>creaDir(/<code><code>$dirPath/<code><code>){/<code>

<code> /<code><code>$curPath/<code> <code>= dirname(/<code><code>__FILE__/<code><code>);/<code>

<code> /<code><code>$path/<code> <code>= /<code><code>$curPath/<code><code>./<code><code>'\\'/<code><code>./<code><code>$dirPath/<code><code>;/<code>

<code> /<code><code>if/<code> <code>(/<code><code>is_dir/<code><code>(/<code><code>$path/<code><code>) || /<code><code>mkdir/<code><code>(/<code><code>$path/<code><code>,0777,true)) {/<code>

<code> /<code><code>return/<code> <code>$dirPath/<code><code>;/<code>

<code> /<code><code>}/<code>

<code>}/<code>

<code>//判断文件是否为空或者出错/<code>

<code>if/<code> <code>(/<code><code>$upFile/<code><code>[/<code><code>'error'/<code><code>]==0 && !/<code><code>empty/<code><code>(/<code><code>$upFile/<code><code>)) {/<code>

<code> /<code><code>$dirpath/<code> <code>= creaDir(/<code><code>'upload'/<code><code>);/<code>

<code> /<code><code>$filename/<code> <code>= /<code><code>$_FILES/<code><code>[/<code><code>'file'/<code><code>][/<code><code>'name'/<code><code>];/<code>

<code> /<code><code>$queryPath/<code> <code>= /<code><code>'./'/<code><code>./<code><code>$dirpath/<code><code>./<code><code>'/'/<code><code>./<code><code>$filename/<code><code>;/<code>

<code> /<code><code>//move_uploaded_file将浏览器缓存file转移到服务器文件夹/<code>

<code> /<code><code>if/<code><code>(move_uploaded_file(/<code><code>$_FILES/<code><code>[/<code><code>'file'/<code><code>][/<code><code>'tmp_name'/<code><code>],/<code><code>$queryPath/<code><code>)){/<code>

<code> /<code><code>echo/<code> <code>$queryPath/<code><code>;/<code>

<code> /<code><code>}/<code>

<code>}/<code>

<code> /<code><code>?>/<code>

ThinkPHP base64上传图片





<fieldset>

点击上传图片并发送后, 可以看到页面上显示出图片, 查看本地文件夹可以看到文件也已储存到服务器.

在客户端实现异步上传的关键在于FormData,关于这部分这里有详细介绍: FormData()



/<fieldset>


分享到:


相關文章: