PHP

修罗bbs无插件实现上传图片到阿里云oss(一)

银戒 · 1月12日 · 2019年 · · · 651次已读

本教程适合不想用插件的人。
本教程适合会点代码的人。
可能官方后期会有人出相关插件,所以如果你不急的话可以用相关插件。
最后,其实我在这里提供的只是一个思路,方法也许并不是最好的方法,代码也不是最好的代码,所以不喜勿喷!
好了,开始。

原理

其实就是利用百度编辑器上传图片需要一个接口地址来实现的,既然百度编辑器上传图片是利用的接口,那么也就是说我可以自定义任何接口用来上传咯?
所以我也可以自己写一个上传图片的后台地址,特地用来上传图片了。

第一步:创建接口地址

在网站根目录下创建一个接口文件夹,文件夹名称自己随便想。
然后将下列代码全部上传到该接口文件夹下面。

在该压缩文件中有下列文件夹以及代码:

aliyun/-----此文件夹为阿里云oss  api文件夹
img/————————可以删除啊
post.php——————————我写的api接口代码

第二步:代码分析

光把代码拿去用是不行的,还需要代码怎么用,是什么一回原理不是?

<?php
// 修罗bss无插件实现上传图片到阿里云oss,WordPress中文交流网原创,欢迎分享,但禁止售卖
 
//配置信息
$aliyun_oss_url = '阿里云上传端点';//如:https://oss-cn-shenzhen.aliyuncs.com
$aliyun_oss_id = 'Access Key';
$aliyun_oss_key = 'Secret Key';
$aliyun_oss_bucket = 'BUCKET';//BUCKET名称
$oss_domain='访问链接';
 
 
//允许上传图片类型可以自己修改
$type = 'jpg,jpeg,png';
 
 
//连接阿里云,引入阿里云配置文件
require_once 'aliyun/autoload.php'
use OSS\OssClient;
 
//开始逻辑判断
if (isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
    $extArr = explode(',',$type); 
    //获取文件名称
    $name = $_POST['name'];
    if (empty($name)) {
        $data_arr['code']=1;
        $data_arr['message']='请选择上传的文件!';
        header('content-type:application/json');
        echo json_encode($data_arr);
        exit();
    }
    //获取文件类型
    $ext = explode('.',$name);
    $ext =array_pop($ext);;
    if (!in_array($ext, $extArr)){
        $data_arr['code']=1;
        $data_arr['message']='只能上传图片格式的文件!';
        header('content-type:application/json');
        echo json_encode($data_arr);
        exit();
    }
     
//给文件命名
$rand=rand(10000,99999999);
$file_name ='file-'.date('Y-m-d-H-i-s',time()).'-'.$rand.'.'.$ext;
 
//获取文件——————注意修罗bbs对文件进行了处理,上传的文件是base_64编码格式的,不能直接上传到阿里云os
$tmp=$_POST['data'];
 
//从base_64数据中分离出图片
$base64_body = substr(strstr($tmp,','),1);
$img_len = strlen($base64_body);
 
//获取图片大小并判断
$file_size = $img_len - ($img_len/8)*2;
$file_size = number_format(($file_size/1024),2).'kb';
if($file_size > 1024*4){
    $data_arr['code']=1;
    $data_arr['message']='请上传4M以下的图片!';
    header('content-type:application/json');
    echo json_encode($data_arr);
    exit();
} 
//因为阿里云不能直接上传base64格式的代码,所以我这里讲这个base_64代码的图片先在本地用php生成一张图片,然后再上传,上传成功之后再删
$imageName = $file_name;
$imageSrc="./". $imageName;
//将base_64生成图片
$r = file_put_contents($imageSrc, base64_decode($base64_body));
if (!$r) {
//图片生成失败
    $data_arr['code']=1;
    $data_arr['message']='上传出错!';
    header('content-type:application/json');
    echo json_encode($data_arr);
    exit();
}else{
//图片生成成功
    $tmp=$file_name;
}
 
//开始上传
$ossClient=new OssClient($aliyun_oss_id,$aliyun_oss_key,$aliyun_oss_url);
$rs=uploadFile($ossClient,$aliyun_oss_bucket,$file_name,$tmp);
if($rs['info']['http_code']===200){
    $file_url=$rs['info']['url'];
    $file_url=$oss_domain.'/bbs_files/post/'.date('Y-m-d').'/'.$file_name;
    $data_arr['code']=0;
    $data_arr['message']['width']=$_POST['width'];
    $data_arr['message']['height']=$_POST['height'];
    $data_arr['message']['url']=$file_url;
    $data_arr['message']['message']='上传成功!';
    //上传成功后删除图片
    unlink ($file_name);
}else{
    $data_arr['code']=1;
    $data_arr['message']='上传出错!';
}
header('content-type:application/json');
echo json_encode($data_arr);
}
 
//阿里云oss文件夹创建
function uploadFile($ossClient,$bucket,$file_name,$tmp){
       //上传文件的文件名称,可修改
    $object="bbs_files/post/".date('Y-m-d')."/$file_name";
    $filePath=$tmp;
    try{
        $rs = $ossClient->uploadFile($bucket, $object, $filePath);
    }catch (OssException $e){
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    return $rs;
}

第三步:修改百度编辑器

转教程二:https://www.inacorner.top/138.html

0 条回应