错误文件上传Codeigniter Ajax

时间:2017-05-22 13:54:46

标签: php jquery json ajax codeigniter

将文件加载到服务器并检查所有内容时出错,显然可以提供帮助 enter image description here

查看

<div class="modal-content">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <h4 class="modal-title">Modal title</h4>
  </div>
  <div class="modal-body">
        <form id="myForm" action="" method="post" class="form-horizontal" enctype="multipart/form-data">
                    <input type="hidden" name="txtProdId" value="0">
                    <div class="form-group">
                <label for="category" class="label-control col-md-4">Nombre categoría</label>
                <div class="col-md-8">
                    <select class="form-control col-md-4" for="name" name="txtId" id="categoria"> 
                    </select>
                    </div>
            </div>
                    <div class="form-group">
                <label for="subcategory" class="label-control col-md-4">Nombre subcategoría</label>
                <div class="col-md-8">
                    <select class="form-control col-md-4" for="name" name="txtSubId" id="subcategoria"> 
                    </select>
                </div>
            </div>
                    <div class="form-group">
                <label for="codig" class="label-control col-md-4">Codigo</label>
                <div class="col-md-8">
                    <input type="text" name="txtCodigo" class="form-control">
                </div>
            </div>
                    <div class="form-group">
                <label for="name" class="label-control col-md-4">Nombre Producto</label>
                <div class="col-md-8">
                    <input type="text" name="txtProducto" class="form-control">
                </div>
            </div>
                    <div class="form-group">
                <label for="description" class="label-control col-md-4">Descripción</label>
                <div class="col-md-8">
                    <textarea class="form-control" name="txtDescripcion"></textarea>
                </div>
            </div>
                    <div class="form-group">
                <label for="picture" class="label-control col-md-4">Imagen</label>
                <div class="col-md-8">
                    <input type="file" name="txtFoto"  id="txtFoto">
                </div>
            </div>
                    <div class="form-group">
                <label for="cant" class="label-control col-md-4">Cantidad</label>
                    <label for="catalog" class="label-control col-md-4">Precio catálogo</label>
                    <label for="ofert" class="label-control col-md-4">Precio oferta</label>
            </div>
                    <div class="input-group">
                        <div>
                            <input type="text" name="txtCantidad" class="form-control">
                        </div>
                            <span class="input-group-addon">-</span>
                        <div>
                            <input type="text" name="txtCatalogo" class="form-control">
                        </div>
                            <span class="input-group-addon">-</span>
                        <div>
                            <input type="text" name="txtOferta" class="form-control">
                        </div>
                    </div>
                </form>
  </div>
  <div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
    <button type="button" id="btnSave" class="btn btn-primary">Guardar</button>
  </div>
</div><!-- /.modal-content -->

Jquery ajax查看

$(function(){
    showAllProduct();

    //Add New
    $('#btnAdd').click(function(){
        $('#myModal').modal('show');
        $('#myModal').find('.modal-title').text('Registrar Producto');
        $('#myForm').attr('action', '<?php echo base_url() ?>producto/addProduct');
    });

    $('#btnSave').click(function(){

                    var url = $('#myForm').attr('action');
                    var data = $('#myForm').serialize();

        //validate form
        var codig = $('input[name=txtCodigo]');                
                    var productName = $('input[name=txtProducto]');
                    var description = $('textarea[name=txtDescripcion]');
                    var cant = $('input[name=txtCantidad]');
                    var catalog = $('input[name=txtCatalogo]');
                    var ofert = $('input[name=txtOferta]');
                    var myFile = $("#txtFoto").val();
                    alert(myFile);

        var result = '';
        if(codig.val()==''){
            codig.parent().parent().addClass('has-error');
        }else{
            codig.parent().parent().removeClass('has-error');
            result +='1';
        }
        if(productName.val()==''){
            productName.parent().parent().addClass('has-error');
        }else{
            productName.parent().parent().removeClass('has-error');

            result +='2';
        }
                    if(description.val()==''){
            description.parent().parent().addClass('has-error');
        }else{
            description.parent().parent().removeClass('has-error');

            result +='3';
        }
                    if(cant.val()==''){
            cant.parent().parent().addClass('has-error');
        }else{
            cant.parent().parent().removeClass('has-error');

            result +='4';
        }
                    if(catalog.val()==''){
            catalog.parent().parent().addClass('has-error');
        }else{
            catalog.parent().parent().removeClass('has-error');

            result +='5';
        }
                    if(ofert.val()==''){
            ofert.parent().parent().addClass('has-error');
        }else{
            ofert.parent().parent().removeClass('has-error');

            result +='6';
        }
                    //if()

        if(result=='123456'){

            $.ajax({
                type: 'ajax',
                method: 'post',
                url: url,
                data: data,
                async: false,
                dataType: 'json',
                success: function(response){
                    if(response.success){
                        $('#myModal').modal('hide');
                        $('#myForm')[0].reset();
                        if(response.type=='add'){
                            var type = 'añadido';
                        }else if(response.type=='update'){
                            var type ='actualizado';
                        }
                        $('.alert-success').html('Producto '+type+' con éxtito').fadeIn().delay(4000).fadeOut('slow');
                        showAllProduct();
                    }else{
                        alert('Error');
                    }
                },
                error: function(){
                                        alert('No se puede añadir el dato');
                }
            });
        }
    });
            });

控制器:'txtFoto'文件未到达,就好像它已从表格中发送一样

public function addProduct(){

    $pathArchivo = $this->filePath();
    $result = $this->m->addProduct($pathArchivo);
    $msg['success'] = false;
    $msg['type'] = 'add';
    if($result){
        $msg['success'] = true;
    }
    echo json_encode($msg);
}

    public function filePath(){

        $archivo=$_FILES['txtFoto'];

        $config['upload_path'] = realpath(APPPATH.'../image/product/');
        //$config['file_name'] = "nombre_archivo";
        $config['allowed_types'] = "gif|jpg|jpeg|png";
        $config['max_size'] = "50000";
        $config['max_width'] = "2000";
        $config['max_height'] = "2000";

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

        $res =  '';

        if ( ! $this->upload->do_upload($archivo)) {
            $error = array('error' => $this->upload->display_errors()); 
            $res = 'hola no funciona'; 
            print_r($error);
        }else { 
            $file_data = $this->upload->data();
            $file_path = './image/product/'.$file_data['file_name'];
            $res = $file_path;
            //print_r($data);
        } 
        return $res;

    }

模型

public function addProduct($path){

    $field = array(
                    'sub_id'=>$this->input->post('txtSubId'),
                    'pr_codigo'=>$this->input->post('txtCodigo'),
                    'pr_nombre'=>$this->input->post('txtProducto'),
                    'pr_descripcion'=>$this->input->post('txtDescripcion'),
                    'pr_cantidad_stock'=>$this->input->post('txtCantidad'),
                    'pr_precio_catalogo'=>$this->input->post('txtCatalogo'),
                    'pr_precio_oferta'=>$this->input->post('txtOferta'),
                    'pr_foto'=>$path
        );
    $this->db->insert('producto', $field);
    if($this->db->affected_rows() > 0){
        return true;
    }else{
        return false;
    }
}

1 个答案:

答案 0 :(得分:1)

如果您尝试发送 TEXT 文件,则您的方法正确。 在继续使用AJAX之前, 让我们尝试发送文件正常 你想要像这样收到它

$this->upload->do_upload('txtFoto');

我很好奇,如果您使用ci's upload handler,为什么要从 PHP $_FILE中获取它?

 $_FILES['txtFoto']

您可以从 $ _ FILES 分享任何var_dump吗?

修改

您可以使用FormData

通过 AJAX 进行操作
var formData = new FormData($('#myForm'))
$.ajax({
            type: 'ajax',
            method: 'post',
            url: url,
            data: data,
            async: false,
            success: function(response){
               //handle success
            },
            error: function(){
                //handle error
                alert('No se puede añadir el dato');
            }
        });

在控制器上, 初始化上传库

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

确保您要上传图片的目录是可写