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

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