作者 郭盛
1 个管道 的构建 通过 耗费 10 秒

修改接口

... ... @@ -14,7 +14,7 @@ use think\Config;
*/
class Common extends Api
{
protected $noNeedLogin = ['init','getTree'];
protected $noNeedLogin = ['init','getTree','upload_base64','base64_image_content'];
protected $noNeedRight = '*';
/**
... ... @@ -202,5 +202,129 @@ class Common extends Api
}
/**
* base64上传文件
*
* @ApiTitle (base64上传文件)
* @ApiSummary (base64上传文件)
* @ApiMethod (POST)
* @ApiRoute (/api/common/upload_base64)
* @ApiParams (name="base64_img", type="string", required=true, description="图片base64数据")
* @ApiReturnParams (name="code", type="integer", required=true, sample="0")
* @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
* @ApiReturn ({
'code':'1',
'msg':'返回成功',
"data": {
"url": 当前页数,
"priview_url": 总页数
}
})
*
*/
public function upload_base64() {
if($this->request->isPost()) {
$param = $this->request->param();
$validate = new \think\Validate([
'base64_img' => 'require',
]);
$validate->message([
'base64_img.require' => '缺少图片base64数据!',
]);
if (!$validate->check($param)) {
$this->error($validate->getError());
}
$path = '/uploads/lesson_app';
$image = $this->base64_image_content($param['base64_img'],$path);
if(!$image) {
$this->error('上传失败');
}
$upload = Config::get('upload');
$config = get_addon_config('qiniu');
$filePath = '.'.$path.'/'.$image;
$suffix = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));
$suffix = $suffix && preg_match("/^[a-zA-Z0-9]+$/", $suffix) ? $suffix : 'file';
$replaceArr = [
'{year}' => date("Y"),
'{mon}' => date("m"),
'{day}' => date("d"),
'{hour}' => date("H"),
'{min}' => date("i"),
'{sec}' => date("s"),
'{random}' => Random::alnum(16),
'{random32}' => Random::alnum(32),
'{filename}' => $suffix ? substr(pathinfo($filePath)['basename'], 0, strripos(pathinfo($filePath)['basename'], '.')) : pathinfo($filePath)['basename'],
'{suffix}' => $suffix,
'{.suffix}' => $suffix ? '.' . $suffix : '',
'{filemd5}' => md5_file(realpath($filePath)),
];
$savekey = $upload['savekey'];
$savekey = str_replace(array_keys($replaceArr), array_values($replaceArr), $savekey);
$fileName = substr($savekey, strripos($savekey, '/') + 1);
$policy = array(
'saveKey' => ltrim($savekey, '/'),
);
$auth = new Auth($config['app_key'], $config['secret_key']);
$token = $auth->uploadToken($config['bucket'], null, $config['expire'], $policy);
$multipart = [
['name' => 'token', 'contents' => $token],
[
'name' => 'file',
'contents' => fopen(realpath($filePath), 'r'),
'filename' => $fileName,
]
];
try {
$client = new \GuzzleHttp\Client();
$res = $client->request('POST', $config['uploadurl'], [
'multipart' => $multipart
]);
$code = $res->getStatusCode();
//成功不做任何操作
} catch (\GuzzleHttp\Exception\ClientException $e) {
// $attachment->delete();
unlink($filePath);
$this->error("上传失败");
}
unlink($filePath);
$return = [
'url' => $savekey,
'priview_url' => cdnurl($savekey,true)
];
$this->success('上传成功',$return);
}
}
/**
* [将Base64图片转换为本地图片并保存]
* @E-mial wuliqiang_aa@163.com
* @TIME 2017-04-07
* @WEB http://blog.iinu.com.cn
* @param [Base64] $base64_image_content [要保存的Base64]
* @param [目录] $path [要保存的路径]
*/
private function base64_image_content($base64_image_content,$path){
//匹配出图片的格式
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
$type = $result[2];
$file_path = date('Ymd',time())."/";
$new_file = '.'.$path."/".$file_path;
if(!file_exists($new_file)){
//检查是否有该文件夹,如果没有就创建,并给予最高权限
mkdir($new_file, 0777,true);
}
$new_file = $new_file.time().".{$type}";
if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){
return $file_path.time().".{$type}";
}else{
return false;
}
}else{
return false;
}
}
}
... ...
此 diff 太大无法显示。