【问题标题】:Can't upload image using ajax in codeigniter无法在codeigniter中使用ajax上传图片
【发布时间】:2020-06-26 21:05:42
【问题描述】:

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

我在我的视图中创建了一个表单,其中询问用户详细信息以及是否选择了候选选项,因此将要求用户选择图像。

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

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

View.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>

ajax 响应

    <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>

Controller.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();
        }
    }

【问题讨论】:

    标签: php ajax codeigniter image-upload


    【解决方案1】:

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

    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);
                },
            });
    

    【讨论】:

    • 感谢您的回答,但是当我添加新的 formData 时,它不会将控件转移到 ajax 这就是我手动执行此操作的原因,其次是当我制作缓存、contentType 和 processType false 所以它开始显示所有字段都是必需的。
    • 在控制器中你会得到带有 $_FILES['slogan'] 的文件,而不是 if(isset($_POST['slogan'])){
    • 我有 isset 功能来检查文件是否附加
    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 2012-03-25
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多