如何从php

时间:2016-09-21 07:23:44

标签: php jquery ajax codeigniter

我正在做一个ajax弹出窗口将图像上传到文件系统中。图片上传过程包括以下步骤..

  1. 选择文件并将其裁剪为所需尺寸。
  2. 结果图像显示在<img>标签src中作为Base64代码。
  3. 将Base64转换为Blob以通过ajax发送
  4. 这是代码......

    $(document).ready(function(){
            $('#btn_save').on('click', function () {
                var PaymentStatus = $("#PaymentStatus").val();
                var image = $('#image-id').val();
    
                var base64ImageContent = image.replace(/^data:image\/(png|jpg);base64,/, "");
                var blob = base64ToBlob(base64ImageContent, 'image/png');
                var formData = new FormData();
                formData.append('picture', blob);
                formData.append('PaymentStatus', PaymentStatus);
                $.ajax({
                        data: formData,
                        url:"/login/advshop/add",
                        method: 'GET',
                        processData: false,
                        contentType: false,
                        success: function (result) {
                            alert("form submitted");
                    },
                    error: function (result) {
                            alert('error');
                            //alert(result);
                    }
            });
        });
    });
    

    但我无法在控制器中获取数据..

    public function add() {
        print_r($_POST['picture']); 
    }
    

    并且错误消息是..

      

    消息:未定义的索引:图片

4 个答案:

答案 0 :(得分:2)

请看我的回答..

       $(document).ready(function () {


        $('#btn_save').on('click', function () {
            var image = $('#image-id').val();
            var base64ImageContent = image.replace(/^data:image\/(png|jpg);base64,/, "");
            var PaymentStatus = $("#PaymentStatus").val();
            var formData = new FormData();
            formData.append('image', base64ImageContent);
            formData.append('PaymentStatus', PaymentStatus);



            $.ajax({
                data: formData,
                url: "/login/advshop/add",
                method: 'POST',
                processData: false,
                contentType: false,
                success: function (result) {
                    alert("form submitted");
                },
                error: function (result) {
                    alert('error');
                    //alert(result);

                }
            });
        });
    })

在控制器中。

    public function add() {


        $data = base64_decode($_POST['image']);


       file_put_contents('images/test.jpg', $data);
     }

你可以使用formData append.decode直接通过ajax传递Base64图像内容base64内容并将其放在file_put_contents()函数中。

答案 1 :(得分:0)

我认为问题在于您想将上传的图像转换为base64字符串,然后您想通过ajax将此字符串传递给控制器​​..它是兄弟..

答案 2 :(得分:0)

我也遇到了这个问题。所以首先在你的表单中取一个隐藏字段并给出hiddenfield的id和value,因为隐藏字段的值是转换后的字符串。然后你可以轻松地将hiddenfield的值即base64字符串变为变量在js by getElementById然后将变量传递给控制器​​..你可以通过$ _POST [&#39; id of hiddenfield&#39;]访问。然后你可以通过save()直接将值存储到数据库中。

答案 3 :(得分:0)

是的,不需要将base64转换为string..base64返回字符串,所以你将这个字符串用于hiddenfield的值。