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 Puntos75820

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

mano hice todo lo que mencionas y me sale que el tipo de archivo no es valido y no se que hacer, estoy uzando el código que me diste hace tiempo para subir ficheros por ajax con codeigniter no se si te acuerdes. Con el CodeIgniter 2 me funciona a la perfección pero con el 3 me da error en el tipo de archivo
Saludos Dairon

0voto

white comentado

Podrías agregar despues de:

public function upload()
{

esto:

print_r($_FILES);

y poner aqui lo que recibes, intenta ver el mime type para ver si la extension esta permitida, reviza que este todo en orden en el fichero /application/config/mimes.php

intenta tambien con otro archivo.

0voto

dairon comentado

en el mime tiene esto en lo referene a imagenes

'bmp'   =>  array('image/bmp', 'image/x-windows-bmp'),
'gif'   =>  'image/gif',
'jpeg'  =>  array('image/jpeg', 'image/pjpeg'),
'jpg'   =>  array('image/jpeg', 'image/pjpeg'),
'jpe'   =>  array('image/jpeg', 'image/pjpeg'),
'png'   =>  array('image/png',  'image/x-png'),

0voto

white comentado

que te imprime print_r($_FILES); ?

0voto

dairon comentado

no me muestra nada porque lo llamo por ajax ahora voy a implementar un ejemplo que me muestre el $_FILES

0voto

dairon comentado

voy a copiar el ejemplo que viene en la documentcion a ver si sale bien

0voto

white comentado

si ves en la consola de tu navegador o de firebug podras ver las peticiones y el resultado de estas. intenta de esa forma.

0voto

white comentado

Acabo de probar en una instalacion de codeigniter 3, sin problemas con tu código, talvez migraste de la 2.x a la 3? intenta descargando la version 3 y reemplazando el archivo system/libraries/upload.php de este zip:

https://github.com/bcit-ci/CodeIgniter/archive/3.0.0.zip

por el fichero Upload.php que tienes actualmente en tu sitio.

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