繁体   English   中英

无法在codeigniter中使用ajax上传图片

[英]Can't upload image using ajax in codeigniter

我正在尝试将图像上传到服务器,但每次出现“您没有选择要上传的文件”的错误时

我在我的视图中创建了一个表单,其中询问用户详细信息,如果选择了候选选项,则将要求用户选择图像。

当我上传图像并使用 jQuery 获取文件路径时,我得到了“C://fakepath/filename.png”,但为此我还配置了许多有效且仅返回文件名的内容。

我已经在名为upload 的根文件夹中创建了一个目录,但仍然无法在上传文件夹和服务器上上传任何图像。

查看.php

                <form method="POST" id="userForm" enctype="multipart/form-data">
                    <div class="form-row">
                        <div class="form-group col-sm-12 col-md-6">
                            <label>First Name *</label>
                            <input type="text" name="firstName" class="form-control" value="<?php echo set_value('firstName'); ?>">
                            <span class="text-danger" id="name_error"><?php echo form_error('firstName'); ?></span>
                        </div>
                        <div class="form-group col-sm-12 col-md-6">
                            <label>Last Name *</label>
                            <input type="text" name="lastName" class="form-control" value="<?php echo set_value('lastName'); ?>">
                            <span class="text-danger"><?php echo form_error('lastName'); ?></span>
                        </div>
                    </div>

                    <h5 class="bg-dark text-white p-3 text-center mt-2 mb-4">User Credentials</h5>  
                    <div class="form-group">
                        <label>Email *</label>
                        <input type="email" name="email" class="form-control" value="<?php echo set_value('email'); ?>">
                        <span class="text-danger"><?php echo form_error('email'); ?></span>
                    </div>
                    <div class="form-group">
                        <label>Password *</label>
                        <input type="password" name="password" class="form-control" value="<?php echo set_value('password'); ?>">
                        <span class="text-danger"><?php echo form_error('password'); ?></span>
                    </div>
                    <div class="form-group">
                        <label>Confirm Password *</label>
                        <input type="password" name="passwordMatch" class="form-control">
                        <span class="text-danger"><?php echo form_error('passwordMatch'); ?></span>
                    </div>

                    <h5 class="bg-dark text-white p-3 text-center mt-2 mb-4">User Status</h5>
                    <div class="form-group">
                        <label>User Status *</label>
                        <select class="form-control" id="userStatus" name="userStatus">
                            <option value="voter">Voter</option>
                            <option value="candidate">Candidate</option>
                            <option value="admin">Admin</option>
                        </select>
                        <span class="text-danger"><?php echo form_error('userStatus'); ?></span>
                    </div>
                    <div class="form-group" id="candidateSlogan">
                        <label>Candidate Slogan *</label>
                        <input type="file" name="userSlogan" class="form-control">
                    </div>
                    <button type="submit" class="btn btn-success">Add User</button>
                </form>

阿贾克斯响应

    <script type="text/javascript">
        $("#userForm").submit(function(e){
            e.preventDefault();
            var firstName = $("input[name='firstName']").val();
            var lastName = $("input[name='lastName']").val();
            var email = $("input[name='email']").val();
            var password = $("input[name='password']").val();
            var passwordMatch = $("input[name='passwordMatch']").val();
            var userStatus = $("#userStatus").val();
            var slogan = $("input[name='userSlogan']").val();

            if (userStatus == 'candidate') {
                if(slogan == ''){
                    alert("Please Attach Candidate Slogan");
                }
            }

            $.ajax({
                method: 'POST',
                url: '<?php echo base_url(); ?>welcome/add_user_validation',
                data: {
                    firstName: firstName,
                    lastName: lastName,
                    email: email,
                    password: password,
                    passwordMatch: passwordMatch,
                    userStatus: userStatus,
                    slogan: slogan
                },
                success: function(data){
                    $('#message').html(data);
                    if(data == 'User Added Successfully'){
                        $('#message').addClass("alert alert-success");
                        $('#message').removeClass("alert-danger");
                        $('#userForm')[0].reset();
                        $("input[name = 'firstName']").focus();
                    }
                    else{
                        $('#message').addClass("alert alert-danger");
                        $('#message').removeClass("alert-success");
                    }
                },
                error: function(data){
                    // alert(data);
                    $('#message').html(data);
                }
            });      
        });
    </script>

控制器.php

   public function add_user_validation(){
        // $this->load->helper(array('form', 'url'))  // already loaded in autoload.php;
        // $this->load->library('form_validation')    // declared in autoload.php;
        $this->form_validation->set_rules("firstName", "First Name", "required|trim|alpha");
        $this->form_validation->set_rules("lastName", "Last Name", "required|trim|alpha");
        $this->form_validation->set_rules("email", "Email", "required|trim|valid_email");
        $this->form_validation->set_rules("password", "Password", "required");
        $this->form_validation->set_rules("passwordMatch", "Password Comfirmation", "required|matches[password]");
        $this->form_validation->set_rules("userStatus", "User Status", "required");

        if($this->input->post('userStatus') == 'candidate'){
            $this->form_validation->set_rules("slogan", "Candidate Slogan", "required");

            if(isset($_POST['slogan'])){
                $config['upload_path'] = './upload/';
                $config['upload_types'] = 'png|jpg|jpeg';

                $this->load->library('upload', $config);
                echo "<script>alert('hello')</script>";

                if($this->upload->do_upload('slogan')){
                    $candidateSlogan = $this->upload->data();
                    // print_r($candidateSlogan);
                }
                else{
                    // echo $this->upload->display_erorrs();
                    // echo "This File type is not allowed";
                    // $candidateSlogan = NULL;
                    $error = array('error' => $this->upload->display_errors());
                    echo $error['error'];
                    // print_r($error);
                }
            }
        }
        else{
            $candidateSlogan = NULL;
        }

        if ($this->form_validation->run()) {
            $this->load->model('main_model');
            $data = array(
                "first_name"    =>  $this->input->post('firstName'),
                "last_name"     =>  $this->input->post('lastName'),
                "email"         =>  $this->input->post('email'),
                "password"      =>  $this->input->post('password'),
                "user_status"   =>  $this->input->post('userStatus'),
                // "slogan"     =>  $this->input->post('userSlogan')
                "slogan"        =>  $candidateSlogan
            );

            // echo "<script>alert(" . $data . ")</script>";
            print_r($data);

            if($this->main_model->add_user($data)){
                echo "User Added Successfully";
            }
            else{
                // $error_msg = $this->db->error();
                // echo $error_msg;
                echo "User Already Exists";
                // echo $this->db->error();
            }       
        }
        else{
            echo validation_errors();
        }
    }

您需要在文件的表单标签中使用它

enctype="multipart/form-data"

在 ajax 调用中为文件添加以下内容

        cache:false,
        contentType: false,
        processData: false,

并使用 formdata 而不是为每个输入手动执行

    var formData = new FormData(this);

现在你的ajax应该是这样的

         var formData = new FormData(this); // this will get all inputs from your form
         $.ajax({
            type:'POST',
            url: '<?php echo base_url(); ?>welcome/add_user_validation',
            data:formData,
            cache:false,
            contentType: false,
            processData: false,
            error: function(data){
                console.log("error");
                console.log(data);
            },
            success:function(data){
                console.log("success");
                console.log(data);
            },
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM