首页 > 解决方案 > 文件上传在 Codeigniter 控制器中获取空值

问题描述

我正在尝试在 Codeigniter 中使用 ajax 上传图像而没有表单提交我的 html 代码是

<div class="profile-img">
                        <img class="" src="<?php echo base_url() ?>assets/dist/img/<?php echo $adminData->image ?> " alt="User profile picture">
                        <div class="file btn btn-lg btn-primary">
                            Change Photo
                            <input type="file" name="profile_img" id="profile_img"/>
                        </div>
                        <span id="uploaded_image"></span>
                    </div>

使用此代码,我使用给定代码在更改事件上发送 ajax

 $('#profile_img').change(function () {
            var file_data = $('#profile_img')[0].files;
            var form_data = new FormData();
            form_data.append('profile_img',file_data);
            var admin_id= <?php echo (int)$adminData->admin_id ?>;
            $.ajax({
                url: "<?php echo base_url(); ?>admin/upload_image",
                method: "GET",
                data: {admin_id: admin_id, form_data: form_data},
                contentType: false,
                cache: false,
                processData: false,
                beforeSend: function ()
                {
                    $('#uploaded_image').html("<label class='text-success'>Uploading...</label>");
                },
                success: function (data)
                {
                    $('#uploaded_image').html(data);

                }
            })
        });

它工作正常,但是当我们点击控制器时,它的 admin_id 和 form_data 都获得空值我的实际问题在这里我仍然尝试获取值,但它总是给出空值我的控制器代码是

function upload_image() {
         $data['admin_id'] = $this->input->post('admin_id');
        if (isset($_FILES['form_data']['name'])) {
            $config1['upload_path'] = 'assets/dist/img/';
            $config1['overwrite'] = TRUE;
            $config1['allowed_types'] = 'gif|jpg|png|jpeg';
            $config1['file_name'] = $_FILES['form_data']['name'];
            $this->load->library('upload', $config1);
            $this->upload->initialize($config1);
            if (!$this->upload->do_upload('form_data')) {
                $error = array('error' => $this->upload->display_errors());
            } else {
                $fileData = $this->upload->data();
                $data['image'] = $fileData['file_name'];
            }
        }
        $this->admin_mod->update_image($data);

    }

谁能建议我我哪里错了。

标签: phphtmlajaxcodeigniter-3

解决方案


您将 FileList 传递给FormData.append您必须传递一个 File。您可以像在数组中一样传递列表中的第一个文件。

var file_data = $('#profile_img')[0].files[0];

您的文件也会在profile_img您尝试读取时发送form_data

    if (isset($_FILES['profile_img']['name'])) {

推荐阅读