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 许可协议。转载请注明出处!