Home  >  Article  >  Backend Development  >  How to get the base64 processed image submitted by ajax in php

How to get the base64 processed image submitted by ajax in php

WBOY
WBOYOriginal
2016-08-18 09:16:162484browse

 

    function onSelectPhoto(files) {
                    file_obj = files[0];
                    if (use_general_upload) {
                        return;
                    }
                    var filesize = file_obj.size < 5120 || file_obj.size > 5242880;
                    var allow_type = '|.jpg|jpeg|.png|.gif|';
                    var ext_name = '|' + file_obj.name.toLowerCase().substr(file_obj.name.length - 4) + '|';
                    var filetype = (allow_type.indexOf(ext_name) == -1 && file_obj.name.indexOf(".") > 0);
                    var reader = new FileReader();
                    reader.onload = function (e) {
                        if (e.target.result.substr(0, 11) == 'data:base64') {
                            $("#preview_img").attr('src',
                                    "data:application/octet-stream;"
                                    + e.target.result.substr(e.target.result.indexOf("base64,")));
                        } else {
                            $("#preview_img").attr('src', e.target.result);
                        }
                    }
                    if (filesize) {
                        file_obj = false;
                        showTextTime("您选择的文件大于5MB,请选择小于5MB的照片", 3000);
                        return false;
                    }
                    if (filetype) {
                        file_obj = false;
                        showTextTime("您选择的文件格式有误,应为JPG、PNG或GIF类型的文件", 3000);
                        return false;
                    }
                    file_name = file_obj.name;
                    reader.readAsDataURL(file_obj);  //
    //                alert(reader);
                }
图片上传处理代码
  function upload_photo() {
                if (file_obj == false) {
                    showTextTime("请先从手机中选取要上传的照片", 2000);
                    return false;
                }
                if (uploading) {
                    showTextTime("照片正在上传中,请稍候...", 2000);
                    return false;
                }
                uploading = true;
                showLoading(loading_src, "照片上传中...", 0);
                if (use_general_upload) {
                    document.forms[0].submit();
                } else {
                    var ui = $("#upload_ifr");
                    var ui = ui[0];
                    ui.contentWindow.upload_photo();
                }
                return false;
            }
       
function upload_photo() {
            var xhr = new XMLHttpRequest();
            if (xhr.upload) {
                xhr.onreadystatechange = function(e) {
                    window.top.callbackHandler(e, xhr);
                };
                xhr.upload.onprogress=function(e){
                    if(e.lengthComputable){
                        var percent =(e.loaded / e.total *100|0)+"%";
                    }
                }
                var formData = new FormData();
                formData.append('files', window.top.file_obj);
//                                alert(formData);
                xhr.open("POST", 'upload_file.php', true);
                xhr.send(formData);
            }
        }

Here how should I get the passed formData in upload_file.php

Reply content:

 

    function onSelectPhoto(files) {
                    file_obj = files[0];
                    if (use_general_upload) {
                        return;
                    }
                    var filesize = file_obj.size < 5120 || file_obj.size > 5242880;
                    var allow_type = '|.jpg|jpeg|.png|.gif|';
                    var ext_name = '|' + file_obj.name.toLowerCase().substr(file_obj.name.length - 4) + '|';
                    var filetype = (allow_type.indexOf(ext_name) == -1 && file_obj.name.indexOf(".") > 0);
                    var reader = new FileReader();
                    reader.onload = function (e) {
                        if (e.target.result.substr(0, 11) == 'data:base64') {
                            $("#preview_img").attr('src',
                                    "data:application/octet-stream;"
                                    + e.target.result.substr(e.target.result.indexOf("base64,")));
                        } else {
                            $("#preview_img").attr('src', e.target.result);
                        }
                    }
                    if (filesize) {
                        file_obj = false;
                        showTextTime("您选择的文件大于5MB,请选择小于5MB的照片", 3000);
                        return false;
                    }
                    if (filetype) {
                        file_obj = false;
                        showTextTime("您选择的文件格式有误,应为JPG、PNG或GIF类型的文件", 3000);
                        return false;
                    }
                    file_name = file_obj.name;
                    reader.readAsDataURL(file_obj);  //
    //                alert(reader);
                }
图片上传处理代码
  function upload_photo() {
                if (file_obj == false) {
                    showTextTime("请先从手机中选取要上传的照片", 2000);
                    return false;
                }
                if (uploading) {
                    showTextTime("照片正在上传中,请稍候...", 2000);
                    return false;
                }
                uploading = true;
                showLoading(loading_src, "照片上传中...", 0);
                if (use_general_upload) {
                    document.forms[0].submit();
                } else {
                    var ui = $("#upload_ifr");
                    var ui = ui[0];
                    ui.contentWindow.upload_photo();
                }
                return false;
            }
       
function upload_photo() {
            var xhr = new XMLHttpRequest();
            if (xhr.upload) {
                xhr.onreadystatechange = function(e) {
                    window.top.callbackHandler(e, xhr);
                };
                xhr.upload.onprogress=function(e){
                    if(e.lengthComputable){
                        var percent =(e.loaded / e.total *100|0)+"%";
                    }
                }
                var formData = new FormData();
                formData.append('files', window.top.file_obj);
//                                alert(formData);
                xhr.open("POST", 'upload_file.php', true);
                xhr.send(formData);
            }
        }

Here how should I get the passed formData in upload_file.php

`

$smeta = $_POST['smeta']; 
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $smeta, $result)) {//base64上传
    $data = base64_decode(str_replace($result[1], '', $smeta));
    $dataname = './Uploads/' . uniqid() . '.' . $result[2];
    if (file_put_contents($dataname, $data)) {
        $this->ajaxoutput($dataname); //返回数据结构自行封装
    }else{
         $this->ajaxerror('上传出错');
    }

}`

base64_decode()

Why don’t you upload the image directly? It’s a thankless effort. If you use base64 to submit, you can post it as a string and just take it out from $_POST in the background.

First extract the image suffix and data stream regularly, and then base64_decode the data stream

private function decodeFile($base64_url)
    {
        preg_match('/^data:image\/(\w+);base64/', $base64_url, $out);

        $type       = $out[1];
        $type_param = 'data:image/' . $type . ';base64,';
        $fileStream = str_replace($type_param, '', $base64_url);    
        $fileStream = base64_decode($fileStream);

        return array(
            'type'       => $type,
            'fileStream' => $fileStream
        );

    }

   public function base64img()
        {
            if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $_POST['pic'], $result))
            {
                $new_file = "Uploads/Picture/" . uniqid() . '.png';
                
                file_put_contents($new_file, base64_decode(str_replace($result[1], '', $_POST['pic'])));
                
                return $new_file;
            }
        }
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn