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 Puntos75880

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!

0voto

dairon comentado

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é

0voto

white comentado

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

0voto

dairon comentado

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

});

0voto

white comentado

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

0voto

dairon comentado

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.

Otras Preguntas y Respuestas


...

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

Conecta