php上传图片为云存储(base64编码实现)
在多个网站的项目下,云存储图片是一个现在比较好的图片存储方式,但是如果用一些第三方的会考虑到一些问题限制的,我摘要了处理云存储的实现,可以对图片进行统一管理,搭建图片服务器等,加大带宽,不会因为网站因为图片拖慢了浏览的响应时间。
以下代码在ThinkPHP下实现云存储的过程(复制到原生PHP,一样可以执行),在一些目录等结构上,可能没有进行非常严格的限制处理,但是一般情况下,都不会导致大问题的实现,代码是可以完美跑通的。
上传图片客户端
<?php namespace Home\Controller; use Think\Controller; /** * 建百站 www.jianbaizhan.com */ class PicController extends Controller{ public function index(){ $imgs = ['logo.png','Public/Home/images/book.png']; $url = 'http://localhost:888/root/UploadDo/upload'; $ret = []; foreach($imgs as $v) { $_fp = fopen($v, 'r') or die('cant open file'); $_basecode = base64_encode(fread($_fp, filesize($v))); fclose($_fp); $_ret = $this->request($url, ['fileAddress' => '/'.$v, 'file' => $_basecode], 'post'); $_ret = json_decode($_ret, true); $info['code'] = $_ret['code']; if ($_ret['code'] == 0) { $info['imgUrl'] = $_ret['data']['imageUrl']; } else { $info['desc'] = $_ret['desc']; } $info['fileAddress'] = $v; $ret[] = $info; } var_dump($ret); } public function request($url, $params = array(), $method = 'GET', $multi = false, $extheaders = array()) { if (!function_exists('curl_init')) E('Need to open the curl extension'); $method = strtoupper($method); $ci = curl_init(); curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 3); curl_setopt($ci, CURLOPT_TIMEOUT, 3); curl_setopt($ci, CURLOPT_RETURNTRANSFER, true); curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ci, CURLOPT_HEADER, false); $headers = (array) $extheaders; switch ($method) { case 'POST': curl_setopt($ci, CURLOPT_POST, TRUE); if (!empty($params)) { if ($multi) { foreach ($multi as $key => $file) { $params[$key] = '@' . $file; } curl_setopt($ci, CURLOPT_POSTFIELDS, $params); $headers[] = 'Expect: '; } else { curl_setopt($ci, CURLOPT_POSTFIELDS, http_build_query($params)); } } break; case 'DELETE': case 'GET': $method == 'DELETE' && curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); if (!empty($params)) { $url = $url . (strpos($url, '?') ? '&' : '?') . (is_array($params) ? http_build_query($params) : $params); } break; } curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE); curl_setopt($ci, CURLOPT_URL, $url); if ($headers) { curl_setopt($ci, CURLOPT_HTTPHEADER, $headers); } $response = curl_exec($ci); curl_close($ci); return $response; } }
接受图片服务器端
<?php namespace Home\Controller; use Common\Controller\AddonController; /** * 建百站 www.jianbaizhan.com */ class UploadDoController extends AddonController { public function upload(){ $fileAddress = I('fileAddress'); $file = I('file'); $_fp = base64_decode($file); $user_dir = 'test/'; $fileAddress = $user_dir.$fileAddress; $fileAddress = str_replace('//', '/', $fileAddress); if(!file_exists(dirname($fileAddress))){ $this->createDir(dirname($fileAddress)); } $fp = fopen($fileAddress, 'w'); $res = fwrite($fp,$_fp); if($res){ $data['code'] = 0; $data['data']['imageUrl'] = 'http://www.jianbaizhan.com/'.$fileAddress; }else{ $data['code'] = 1; $data['desc'] = 'error'; } fclose($fp); echo json_encode($data); } /** * 建立文件夹 * * @param string $aimUrl * @return viod */ function createDir($aimUrl) { $aimUrl = str_replace('', '/', $aimUrl); $aimDir = ''; $arr = explode('/', $aimUrl); $result = true; foreach ($arr as $str) { $aimDir .= $str . '/'; if (!file_exists($aimDir)) { $result = mkdir($aimDir); } } return $result; } }
本文作者: Liaodeity
本文链接: https://www.jianbaizhan.com/article/373
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!