【问题标题】:Error file Upload Codeigniter Ajax错误文件上传 Codeigniter Ajax
【发布时间】:2017-10-22 05:17:55
【问题描述】:

将文件加载到服务器并检查所有内容时出错,显然没问题,请帮忙 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;
    }
}

【问题讨论】:

  • 控制器第37行是什么?
  • 这是第 37 行:$archivo=$_FILES['txtFoto'];

标签: php jquery json ajax codeigniter


【解决方案1】:

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

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

我只是好奇,如果你使用的是ci's upload handler,你为什么要从PHP的 $_FILE获取它?

 $_FILES['txtFoto']

你能分享来自 $_FILES 的任何var_dump 吗?

编辑

您可以通过 AJAX 使用 FormData

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

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

【讨论】:

  • 理论上我可以在变量中获取表单的 txtFoto 内容,但它没有得到任何东西,就好像代码存在,因为它提出了我不知道的问题找到错误,显然是可以的。 $arhivo = $ _FILES ['txtFoto'] 使用函数进行测试:$this-&gt; upload-&gt; do_upload ('txtFoto') 这是我的新错误:Array([error]=>您没有选择要上传的文件。 保存输入数据但不将图像保存在任何一侧就好像它不会加载它
  • 我可以看到您正在使用enctype='multipart/form-data',如果您正在发送文件,这是必需的,但您仍在尝试通过 AJAX 发送文件,问题是您将数据类型指定为 JSON 而不是 formData,并且您也没有 $this->load->library('upload', $config); $this->上传->初始化($config);初始化一下,还有 Upload Path ,是不是writable?
猜你喜欢
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
相关资源
最近更新 更多