总结
豆包 AI 助手文章总结

php如何获取ajax提交过来的经过base64处理后的图片

php中文网
发布: 2016-08-18 09:16:16
原创
2669人浏览过

 

    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);
            }
        }
登录后复制
登录后复制

这里我应该怎么在upload_file.php获取到传递过来的formdata

回复内容:

 

    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);
            }
        }
登录后复制
登录后复制

这里我应该怎么在upload_file.php获取到传递过来的formdata

`

$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()

立即学习PHP免费学习笔记(深入)”;

为什么不直接上传图片,这样做费力不讨好. 如果用base64提交,可以把他当字符串post, 后台从$_POST里取出就好了.

先正则提取图片后缀和数据流,再对数据流进行base64_decode

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;
            }
        }
登录后复制

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号