Codeigniter:通过Ajax上传图像并存储在db中

时间:2016-05-11 07:42:57

标签: javascript php jquery ajax codeigniter

我正在使用CI 3.0.1上传并在我使用ajax之前成功地将图像插入到db中,我想尝试用ajax做错我错过了甚至没有发送数据上传的内容可能是因为我们必须在表单中使用 multipart(),而在ajax中我们只是直接向控制器发送数据,另一件事我不知道如何在响应中接收变量
我的Ajax请求函数是:

<script type="text/javascript">
 $(document).ready(function() {
 alert("thirddddddddd");
        $('#btnsubmit').click(function() 
        {
            alert("i got submitted");
            event.preventDefault();
             var userfile = $("input#pfile").val();
                        alert("uploading");
    $.ajax({
        url: '<?php echo base_url(); ?>upload/do_upload', //how to receive var here ?
            type: 'POST',
             cache: false,
             data: {userfile: userfile},
            success: function(data) {
            alert(data);
            $('.img_pre').attr('src', "<?php echo base_url().'uploads/' ?>");
                $('.dltbtn').hide();
            },
            error: function(data)
            {
            console.log("error");
            console.log(data);
               alert("Error :"+data);
            }
        });
    });
});

我的控制器上传功能 do_upload 是:

 public function do_upload()
    {

            $config['upload_path']          = './uploads/'; #$this->config->item('base_url').
            $config['allowed_types']        = 'gif|jpg|png|jpeg';

            $this->upload->initialize($config);

            if ( ! $this->upload->do_upload('userfile'))
            {
                    $error = array('error' => $this->upload->display_errors());

                    $this->load->view('layouts/header');
                    $this->load->view('home_page', $error);
                    $this->load->view('layouts/footer');
            }
            else
            {
                    $data = array('upload_data' => $this->upload->data());
                    $imagedata = $this->input->post('uerfile');

                    $session_data = $this->session->userdata('logged_in');
                    $id =  $session_data['id'];


                    $result = $this->model_edit->update_dp($id, $imagedata);

                    $image_name = $result->images;

                    $this->session->set_userdata('image', $image_name);

                    echo json_encode($name = array('image' => $image_name));

                    // $image_name = $this->upload->data('file_name');
                    // $data = array('upload_data' => $this->upload->data());

                    // redirect("account");
            }
    }

现在图片甚至没有上传文件夹,如果需要任何其他文件,请告诉我我会在这里发布。感谢

2 个答案:

答案 0 :(得分:1)

您无法使用$("input#pfile").val();

发送文件数据
var len = $("#pfile").files.length;
    var file = new Array();
    var formdata = new FormData();
    for(i=0;i<len;i++)
    {
        file[i] = $("input#pfile").files[i];
        formdata.append("file"+i, file[i]);
    }

并发送formdata作为来自ajax的数据

希望它有所帮助!

答案 1 :(得分:0)

尝试使用以下ajax代码

var formData = new FormData($('#formid'));
$.ajax({
    url: '<?php echo base_url(); ?>upload/do_upload',
    data: formData ,
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function(data){
        alert(data);
    }
});

根据您的代码,文件内容可能无法通过ajax发送。尝试使用上面代码中提到的属性。