PHP封装base64图片上传接口

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>base64图片上传</title>
    <script>
        window.onload = function(){
            var input = document.getElementById("demo_input");
            var result= document.getElementById("result");
            var img_area = document.getElementById("img_area");
            if ( typeof(FileReader) === 'undefined' ){
                result.innerHTML = "抱歉,你的浏览器不支持 FileReader,请使用现代浏览器操作!";
                input.setAttribute('disabled','disabled');
            }else{
                input.addEventListener('change',readFile,false);
            }
        }
        function readFile(){
            var file = this.files[0];
            //这里我们判断下类型如果不是图片就返回 去掉就可以上传任意文件
            if(!/image\/\w+/.test(file.type)){
                alert("请确保文件为图像类型");
                return false;
            }
            var reader = new FileReader();
            reader.readAsDataURL(file);
            console.log();
            reader.onload = function(e){
                result.innerHTML = this.result;
                img_area.innerHTML = '<div class="sitetip">图片img标签展示:</div>![]('+this.result+')';
            }
        }
    </script>
</head>
<body>
<form action="/admin/test/file" method="post">
    <input type="file" value="sdgsdg" id="demo_input" />
    <textarea name="img" id="result" rows=30 cols=300></textarea>
    <p id="img_area"></p>
    <input type="submit" value="提交">
</form>
</body>
</html>

PHP接口代码:

<?php


class TestController
{


    public function fileAction(){

        //接收base64数据
        $image= $_POST['img'];

        //设置图片名称
        $imageName = "file_".date("His",time())."_".rand(1111,9999).'.png';
        //判断是否有逗号 如果有就截取后半部分
        if (strstr($image,",")){
            $image = explode(',',$image);
            $image = $image[1];
        }
        //设置图片保存路径
        $path = "./files/".date("Ymd",time());

        //判断目录是否存在 不存在就创建
        if (!is_dir($path)){
            mkdir($path,0777,true);
        }

        //图片路径
        $imageSrc= $path."/". $imageName;

        //生成文件夹和图片
        $r = file_put_contents($imageSrc, base64_decode($image));
        if (!$r) {
            echo json_encode(['code'=>1,'message'=>'图片生成失败']);exit;
        }else {
            echo json_encode(['code'=>0,'message'=>'图片生成成功']);exit;
        }
    }


}

可能出错(base64长度过长导致):

413 Request Entity Too Large

解决思路:

修改nginx.conf
client_max_body_size 20M;
修改php.ini
upload_max_filesize = 20M

 

通过以上开启nignx、php上传限制后,还可能出现上传失败,可能是保存上传文件的目录权限不够,解决思路:

chmod 777 files

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章