entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Error en subir fichero en CodeIgniter v3

Buenas Tardes, tengo un código que me funcionaba bien en la version 2 de codeigniter y ahora en la 3 me da error diciendo que el tipo de archivo no está permitido y hago todo según la documentación pero aún así me da error:
Código php:

public function upload()
    {
        $config = array();
        $config["upload_path"] = "../WWW/imagenes/aqui/";

        $config["allowed_types"] = "gif|jpg|jpeg|png";
        $config["max_size"] = "0";
        $config["max_width"] = "0";
        $config["max_height"] = "0";
        $config["remove_spaces"] = TRUE;

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

        if(!$this->upload->do_upload('portrait'))
        {
            $errors = array('error' => $this->upload->display_errors());
            die(json_encode($errors));
        }
        else
        {                       
            $data = array('upload_data' => $this->upload->data());            
            $fichero = explode(".",$data['upload_data']['file_name']);
            //$fichero[0]; nombre
            //$fichero[1]; extencion
            $imagen1 = base_url('/imagenes/aqui/'.get_uri($fichero[0]).'.'.$fichero[1]);                       
            die(json_encode(array(
                'file' => get_uri($data['upload_data']['file_name']),
                'url' => base_url('/imagenes/aqui/'.get_uri($fichero[0]).'.'.$fichero[1])
            )));
        }
    }

la documentación está en este link
saludos Dairon

1 Respuesta

2votos

white Puntos75620

Hola @dairon, elimina estas 3 lineas:

$config["max_size"] = "0";
$config["max_width"] = "0";
$config["max_height"] = "0";

estas definiendo el tamaño maximo ahí como 0 por lo que ninguna imagen superior a tamaño 0 podría subirse, lo correcto es definirlo como integro pero de todos modos es innecesario ya que el valor por defecto es 0.

tambien recuerda usar las constantes definidas en codeigniter FCPATH, APPPATH, etc

$config = array(
    // se sube a {donde esta la carpeta "application" e "index.php" }/imagenes/aqui/
    'upload_path' => FCPATH . '/imagenes/aqui/',
    'allowed_types' => 'gif|jpg|jpeg|png',
    'remove_spaces' => TRUE
);

saludos!

dairon comentado Abr 20, 2015

jajjaajaj me va a volver loco ahora ya sube el fichero pero lo sube dos veces en vez de una, era el mime parece fue lo unico que cambié

white comentado Abr 20, 2015

puede ser un error del lado del cliente, adjunta tu codigo javascript/html

dairon comentado Abr 20, 2015

lo llamo así:

var global_data = {
            portrait_upload_url : '<?php echo base_url('/ajax/upload/') ?>'
        };

este es el código seguro lo recuerdas:

/******************
 * SUBIR IMAGENES *
 ******************/
 var portrait_uploader = {
    reader : null,
    form_data : null,
    file_data : null,
    callbacks : {
        progress : false,
        loaded : false,
        uploaded : false,
        error : false
    },

    init : function()
    {
        this.reader = new FileReader();
        this.form_data = new FormData();

        this.handle_file_upload();

        return this;
    },

    on : function(type, callback)
    {
        var _undefined;

        if(this.callbacks[type] === _undefined || typeof callback !== 'function')
            return this;

        portrait_uploader.callbacks[type] = callback;

        return this;
    },

    upload_file : function(submit_btn)
    {
        this.file_data = $('#file').prop('files')[0];

        this.form_data.append('portrait', this.file_data);

        $.ajax({
            url: global_data.portrait_upload_url,
            dataType: 'json',
            cache: false,
            contentType: false,
            processData: false,
            data: portrait_uploader.form_data,                         
            type: 'post',
            xhr: function()
            {
                var xhr = $.ajaxSettings.xhr();

                if(xhr.upload)
                {                   
                    xhr.upload.addEventListener(
                        'progress',
                        portrait_uploader.handle_progress,
                        false
                    );
                }

                return xhr;
            },
            complete : function(data)
            {
                if(portrait_uploader.callbacks.loaded)
                    portrait_uploader.callbacks.loaded.call(null, data);
            },
            success : function(data)
            {
                if(data.error)
                {
                    if(portrait_uploader.callbacks.error)
                        portrait_uploader.callbacks.error.call(null, data.error, data);

                    return false;
                }

                if(portrait_uploader.callbacks.uploaded)
                    portrait_uploader.callbacks.uploaded.call(null, data);
            },
            error : function(data)
            {
                if(portrait_uploader.callbacks.error)
                    portrait_uploader.callbacks.error.call(null, '404 not found', data);
            }
        })

        return false; // prevent anchor action
    },

    handle_progress : function(event)
    {
        console.log('loading');

        if (event.lengthComputable)
        {

            var percentage = (event.loaded / event.total) * 100;

            if(portrait_uploader.callbacks.progress)
                portrait_uploader.callbacks.progress.call(null, percentage, this.file_data);

        }
    },

    handle_file_upload : function()
    {
        $('#file').change(function() {

            var file = (this.files[0].name).toString();

            $('#file-info').empty().text(file);

            portrait_uploader.reader.onload = function(e)
            {
                $('#preview img').attr('src', e.target.result);
            }

            portrait_uploader.reader.readAsDataURL(this.files[0]);
        });

        $('#file-save').on('click', null, {
            reader : this.reader
        }, function(){
            return portrait_uploader.upload_file(this);
        });
    }

};

$(document).ready(function() {

    $('#preview').on('mouseenter mouseleave', null, {can_animate : true}, function(event) {

        var desired_event = {
            mouseleave  : 'fadeOut',
            mouseenter  : 'fadeIn'
        };

        event.data.can_animate = false;

        $("#file-select").stop(true, true)[desired_event[event.type]]("fast", function(){
            event.data.can_animate = true;
        });

    });

    $('#file-select').on('click', function(e) {
        e.preventDefault();
        $('#file').click();
    });

    $('#file').val(null);

    portrait_uploader
        .init()
        .on('progress', function(percentage){
            // en este evento obtenemos el porcentaje de subida C:

            console.log('progreso: ', percentage);
        })
        .on('uploaded', function(data){
            // el archivo se subió
            // tomamos medidas aqui C:
        })
        .on('error', function(msg, data){

            // ocurrio un error
            $('#upload_errors')
                .modal('show')
                .find('.upload_errors')
                .html(msg);
        });

});

white comentado Abr 20, 2015

No logro encontrar ningun problema en ese código, intenta ver en consola/firebug que envie una sola peticion ajax.

dairon comentado Abr 20, 2015

mano ya lo encontré jejeje, es que tenia el mismo código en dos ficheros distintos por un experimiento que estaba haciendo y los tenía los dos vinculados entonces ejecutaba los dos ;),
Gracias por todo @white

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta