Codeigniter 3中的Ajax图像上传错误

时间:2017-06-29 17:23:07

标签: php jquery ajax codeigniter

您好我使用Codeigniter 3和jQuery ajax。

我使用内置的上传库...

我想在我的服务器上传图片,但总是收到此错误消息:

  

您没有选择要上传的文件。

这是我的代码

查看

<?php echo form_open_multipart('settings/uploadprofilephoto', array('id' => 'upload-avatar-form'));?>
<!-- Modal -->
<div id="myModal" class="modal fade" role="dialog">
    <div class="modal-dialog">
        <!-- Modal content-->
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Upload profile photo</h4>
            </div>
            <div class="modal-body">
            </div>
            <div class="modal-footer">
                <div class="row">
                    <div class="form-group col-md-6">
                            <input type="file" name="profilephoto" id="profile-photo" class="form-control">
                    </div>
                    <div class="form-group col-md-6">
                        <button type="submit" id="upload" class="btn btn-success">Upload</button>
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- Modal -->
<?php echo form_close();?>

控制器

public function uploadProfilePhoto(){

        $config = array(
            'upload_path' => base_url() . 'uploads/test',
            'allowed_types' => 'jpg|jpeg|gif|png',
            'min_height' => 480,
            'min_width' => 640,
            'remove_spaces' => true,
        );

        $this->load->library('upload', $config);

         if($this->upload->do_upload("profilephoto")){

            $data = array(
                'status' => true,
                'messages' => 'Uploaded'
            );

            echo json_decode($data);

        }else{

            $data = array(
                'status' => false, 
                'messages' =>  $this->upload->display_errors()
            );

            echo json_encode($data);
        }

    }

AJAX

/* 
Upload profile photo
*/
$("#upload-avatar-form").submit(function(event){
    $.post(base_url + "settings/uploadprofilephoto" , $(this).serialize(), function(data){
        console.log(data);
       //alert("ok");
    });
    event.preventDefault();
});

我哪里错了?

4 个答案:

答案 0 :(得分:1)

serialize()不会在其中传递图片。它不适用于multipart formdata。

而是像这样使用: var formData = new FormData(this);

传递此formData变量而不是$(this).serialize()

答案 1 :(得分:0)

试试这个

$('#button_name').on('click', function(event) { 

    event.preventDefault();

    $.ajax({
        url: "<?php echo base_url('settings/uploadprofilephoto');?>",
        type: 'post',       
        dataType: 'json',
        data: new FormData(this),
        cache: false,
        contentType: false,
        processData: false,     
        success: function(json) {
            // Success Stuff
        },          
    });
}); 

在视图部分

<button type="button" id="button_name">Upload</button>

答案 2 :(得分:0)

你必须尝试这个

$('#logo_form').on('submit',function(form){
                   form.preventDefault(); 
                   var me = $(this);

                   var file_data = $('#file').prop('files')[0];
                    var form_data = new FormData();
                    form_data.append('file', file_data);
                    $.ajax({
                        url: me.attr('action'), // point to server-side controller method
                        dataType: 'text', // what to expect back from the server
                        cache: false,
                        contentType: false,
                        processData: false,
                        data: form_data,
                        type: 'post',
                        success: function (response) {
                            $("#logo_form")[0].reset();
                            $('#logo_success').html(response); // display success response from the server
                            window.setTimeout(function(){location.reload()},1000);
                        },
                        error: function (response) {
                            $('#error').html(response); // display error response from the server
                        }
                    });
                });

答案 3 :(得分:0)

请检查下面提到的解决方案,这将帮助您发送包含输入数据的文件。

var myFormData = new FormData();

$(document).on("click", "button", function(e) {
  e.preventDefault();
  var inputs = $('#my_form input[type="file"]');
  $.each(inputs, function(obj, v) {
    var file = v.files[0];
    var filename = $(v).attr("data-filename");
    var name = $(v).attr("id");
    myFormData.append(name, file, filename);
  });
  var inputs = $('#my_form input[type="text"]');
  $.each(inputs, function(obj, v) {
    var name = $(v).attr("id");
    var value = $(v).val();
    myFormData.append(name, value);
  });
  var xhr = new XMLHttpRequest;
  xhr.open('POST', '/echo/html/', true);
  xhr.send(myFormData);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="my_form" enctype="multipart/form-data">
    <input type="file" name="file_1" id="file_1" data-filename="image.jpg"><br />
    <input type="text" name="check1" id="check1"/><br />
    <input type="text" name="check2" id="check2"/><br />
    <input type="text" name="check3" id="check3"/><br />
    <button>Submit</button>
</form>

如果不起作用,请告诉我。