Problema con los uploads, pero solo con los MIMEs de documentos, no con los de imagen

225 views
Skip to first unread message

Fernando Val

unread,
Oct 7, 2009, 6:31:57 AM10/7/09
to codeigniter-spanish
Hola amigos,
Tengo un pproblema que me está volviendo loco y ya no se que hacer ni que mirar.
Resulta que estoy utilizando una función crear imágenes que para imágenes funciona a las mil maravillas, pero ahora lo estoy aplicando en otro modelo para subir sólo documentos de tipo no imagen.
Lo he adaptado. sobre todo los MIME y he quitado la configuración y creación de thumbnail y para imagenes me sigue funcionando y cuando intento subir otro tipo de archivos (PDF por ejemplo) no suben y por tanto me salta al bucle de error de lafunción.
¿Algún alma caritativa me puede ayudar?
Este es controlador (documentos):
(aviso de que utilizo el model de archivos para subir los del controler documentos).

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 function create() {
  // Validaciones
  $this->_validation();
   
  if($this->form_validation->run())
  {  
   
  // Poblamos el array $datoss con los valores enviados por el formulario
  $datos['title'] = $this->input->post('title', TRUE);
  $datos['category'] = "documento";
  $datos['file'] = $this->input->post('file', TRUE);
  $datos['body'] = $this->input->post('body', TRUE);
  $datos['status'] =$this->input->post('status', TRUE);
   
  $this->_array_create();
   
  // Cargamo la librería upload con sus ajustes de configuración
  $config['upload_path'] = './assets/archivos/';
  $config['allowed_types'] = 'gif|jpg|png|jpeg|doc|pdf|txt|text|xlsx|xl';
  $config['max_size'] = '0';
  $this->load->library('upload', $config);
   
  // Comprobamos si el archivo ha subido
  if (!$this->upload->do_upload("documento")){
  $this->session->set_flashdata('message', 'El <strong>documento</strong> no ha podido subir');
  //redirect("admin/documentos/index");
  } else { 
  $datos_upload = $this->upload->data();  
  $datos['file'] = $datos_upload['file_name'];
  // Ya que solo quiero que los guarde cómo documento en la BDD
  //$datos['category']= 'documento';  
  $this->content->add($datos);
  $this->session->set_flashdata('message', 'El <strong> documento '.$datos['file'] .'</strong> ha sido creado');
  //edirect("admin/documentos/index");
  }
  }
  else
  {
  // Si falla la validacion seguimos en el view add
  $this->auth->view('archivos/create');
  }

 }

Este es el formulario del view documentos/create:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<!-- formulario -->
 <?php echo form_open_multipart('admin/' . $model_plur . '/create/');?>

  <label>Título:</label><br/>
  <input class="input" name="title" value="" size="20" maxlength="255" /><br/><br/>
  
  <label>Archivo:</label><br/>
  <input type="file" name="documento" value="" /><br/><br/>
   
  <label>Descripción:</label><br/>
  <textarea rows="6" cols="70" name="body"></textarea><br/><br/>
   
  <label>Estado:</label><br/>
  <select name="status">
  <option value="activo" selected="selected" >activo</option>
  <option value="inactivo">inactivo</option>
  </select>
   
  <br/><br/>
  <input type="submit" name="crear" value="crear"/><br/>

  <?php echo form_close(); ?>
<!-- // formulario -->

Este es el modelo (archimosmodel):
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 function add($datos){
  $query = $this->db->insert_string('files', $datos);
  $consulta = $this->db->query($query);
  if (!$consulta){
  return FALSE;
  } else {
  return $this->db->insert_id();
  }
 }

Muchas gracias de antemano. Un saludito a todos.

--
Fernando Val
Web Designer
http://www.fernandoval.es

Nokrosis

unread,
Oct 7, 2009, 8:45:25 AM10/7/09
to codeignit...@googlegroups.com
Qué error te marca?

2009/10/7 Fernando Val <aaro...@gmail.com>

Fernando Val

unread,
Oct 7, 2009, 9:13:17 AM10/7/09
to codeignit...@googlegroups.com
No, no he puesto para que devuelva el error, porque no tengo muy claro donde ponerlo y donde recogerlo.
Si me echas un cable y me dices donde iría, lo pongo...
De momento sólo me manejo con los flashdata.
Muchas gracias de todos modos

Fernando Val

unread,
Oct 7, 2009, 9:52:57 AM10/7/09
to codeignit...@googlegroups.com
Seré... ejem. Perdonadme, no era por pereza, era desesperación. :-)
Estoy viendo la docuemntación y ya se donde va el error reporting, ahora trataré de que me lo muestre la vista y os digo cual es el error que devuelve...

Fernando Val

unread,
Oct 7, 2009, 10:11:01 AM10/7/09
to codeignit...@googlegroups.com
Pues soy incapaz de hacerlo aparcer el error, que os parece, he probado a ponerlo tanto en listado que es donde redirecciono al final, cómo en la vista del formulario, tal que así
Controlador:
  $error = array('error' => $this->upload->display_errors());

  $this->session->set_flashdata('message', 'El <strong>documento</strong> no ha podido subir');
  //redirect("admin/documentos/index");  
  $this->auth->view('documentos/create', $error);
En la vista index (listado) y en la vista create, he puesto:
<?php if (validation_errors()): ?>
 <h1><div><?php echo $error;?></div></h1>
  <div class='flash wrong'><?php echo validation_errors(); ?></div>
<?php endif; ?
Lo he puesto de las dos formas para ver si alguna de ellas rulaba...
Vamos que no saco el error ni para atras

Fernando Val

unread,
Oct 7, 2009, 10:39:36 AM10/7/09
to codeignit...@googlegroups.com
Ya tengo el error:
The filetype you are attempting to upload is not allowed.
Estoy tratando de usbir un pdf, doc y xls y nada y sin embargo pongo esto en la config:
$config['allowed_types'] = 'gif|jpg|png|jpeg|doc|pdf|txt|text|xlsx|xl';
En la documentación no me queda claro si hay una forma de permitir cualquier formato
¿Alguien sabe de esto?
Aunque he pobado ha montar un ejemplo muy sencillito de un tutorial que se supone que debe funcionar y me pasa lo msimo, sube imágenes pero no documentos.
Empiezo a pensar que es un problema de mis MAMP en local, quizas en el servidor de producción no dé este bug...
¿QUe opináis?

Hernando Gisinger

unread,
Oct 7, 2009, 10:59:47 AM10/7/09
to codeignit...@googlegroups.com
Prueba haciendo:

$this->upload->set_allowed_types('gif|jpg|png|jpeg|doc|pdf|txt|text|xlsx|xl');

antes de esta línea:


if (!$this->upload->do_upload("documento")){

Saludos

Fernando Val

unread,
Oct 7, 2009, 11:14:47 AM10/7/09
to codeignit...@googlegroups.com
Nada, me sigue dando el mismo error... :-(
Gracias de todos modos.

Hernando Gisinger

unread,
Oct 7, 2009, 11:36:59 AM10/7/09
to codeignit...@googlegroups.com
El problema es solo con firefox 3 o con explorer tambien? Hay un bug en FF 3 y aca dice como arreglarlo:

http://codeigniter.com/bug_tracker/bug/4906/

Fernando Val

unread,
Oct 7, 2009, 11:45:47 AM10/7/09
to codeignit...@googlegroups.com
Pues la verdad es que solo lo he porbado en Firefox...
Ahora voya probar a ver y luego me leo detenidamente el wiki. Por cierto, ¿que búsqueda has echo para encontra esa página del wiki? Porque yo he puscado y nada...
Muchas gracias

Fernando Val

unread,
Oct 7, 2009, 11:49:32 AM10/7/09
to codeignit...@googlegroups.com
Pues lo acabo de probar en Safary y sigue fallando.. Voy a porbar en IE7...

Fernando Val

unread,
Oct 7, 2009, 11:55:23 AM10/7/09
to codeignit...@googlegroups.com
Pues mi gozo en un pozo... en IE7 y IE6 no funciona...
¿Alguna idea más por ahí?
Sigo pensando que puede ser un problema del MAMP, esta noche pruebo en casa en windows con Appserv...

Nokrosis

unread,
Oct 7, 2009, 11:57:41 AM10/7/09
to codeignit...@googlegroups.com

Imprime la variable global $_FILES y verifica el mime que te manda:

print_r($_FILES);

Checa si ese mime está en el archivo mimes.php y si no, vinculalo con la extensión.


2009/10/7 Fernando Val <aaro...@gmail.com>

Hernando Gisinger

unread,
Oct 7, 2009, 12:09:53 PM10/7/09
to codeignit...@googlegroups.com
Puse

The filetype you are attempting to upload is not allowed.

en el google

Fernando Val

unread,
Oct 7, 2009, 12:20:06 PM10/7/09
to codeignit...@googlegroups.com
Me devuelve esto:
Array ( [documento] => Array ( [name] => bluebrintcss.pdf [type] => text/html [tmp_name] => /Applications/MAMP/tmp/php/phpeTz4nH [error] => 0 [size] => 37752 ) ) Array ( [documento] => Array ( [name] => bluebrintcss.pdf [type] => text/html [tmp_name] => /Applications/MAMP/tmp/php/phpeTz4nH [error] => 0 [size] => 37752 ) ) Array ( [documento] => Array ( [name] => bluebrintcss.pdf [type] => text/html [tmp_name] => /Applications/MAMP/tmp/php/phpeTz4nH [error] => 0 [size] => 37752 ) )
Y ni rastro del MIME... ¿Tu ves algo que te de una pista?
Gracias.

Fernando Val

unread,
Oct 7, 2009, 12:21:09 PM10/7/09
to codeignit...@googlegroups.com
Gracias Hernando. El caso es que otras veces lo hago, pero esta vez no copié y pegué el error... :-(
Muchas gracias

Nokrosis

unread,
Oct 7, 2009, 12:34:25 PM10/7/09
to codeignit...@googlegroups.com
Te está mandando que el tipo mime es text/html. Estas seguro que es un pdf? lo más seguro es que sea un html guardado con extension pdf.
Saludos.

2009/10/7 Fernando Val <aaro...@gmail.com>

Fernando Val

unread,
Oct 7, 2009, 12:41:45 PM10/7/09
to codeignit...@googlegroups.com
No, segurísimo, es un ebook que ya he leído con acrobat, además he provado con varios PDFs, TXT, DOC, etc.

Germán Mudry

unread,
Oct 7, 2009, 12:53:05 PM10/7/09
to codeignit...@googlegroups.com
Hola Telma... te paso uno de los mensajes de la lista de codeigniter.... Saludos.

Página del teamviewer ->
http://www.teamviewer.com/es/index.aspx

Saludos.


Fernando Val escribió:

Hernando Gisinger

unread,
Oct 7, 2009, 12:56:46 PM10/7/09
to codeignit...@googlegroups.com
Prueba reemplazando en mimes.php

'pdf'    =>    array('application/pdf', 'application/x-download'),

por

'pdf'    =>    array('application/pdf', 'application/x-download', 'text/html'),


Saludos

Fernando Val

unread,
Oct 7, 2009, 1:22:25 PM10/7/09
to codeignit...@googlegroups.com
Acabo de probarlo en Windows Vista con Appserv, y nada de nada...
Que desesperación... pfffffff.

Hernando Gisinger

unread,
Oct 7, 2009, 2:33:37 PM10/7/09
to codeignit...@googlegroups.com
La última prueba, ya no me quedan más ideas :(

En la lista pon primero pdf, deja las imagenes al final

Saludos

Hernando Gisinger

unread,
Oct 7, 2009, 2:36:43 PM10/7/09
to codeignit...@googlegroups.com
CodeIgniter tiene un bug cuando en la lista de tipos hay imagenes y no imagenes

http://codeigniter.com/bug_tracker/bug/6780/

jose victor ramos sanchez

unread,
Oct 7, 2009, 11:54:35 PM10/7/09
to codeignit...@googlegroups.com
Asi por no dejar; ¿Que hay del tamaño del archivo?, no afecta en nada ?.

2009/10/7 Hernando Gisinger <hgis...@gmail.com>



--
<☼<allende>☼>
http://www.aliviana.com

Nokrosis

unread,
Oct 8, 2009, 12:00:37 AM10/8/09
to codeignit...@googlegroups.com
Necesitas permitirlo en 2 lugares:

1. En la configuración de la clase del upload
2. En el php.ini hay un parámetro llamado max_upload_filesize (o algo parecido)

Si planeas que el archivo sea mucho más grande, tal vez debas establecer también en el php.ini el max_execution_time.

Saludos.

2009/10/7 jose victor ramos sanchez <joze...@gmail.com>

Fernando Val

unread,
Oct 8, 2009, 4:17:12 AM10/8/09
to codeignit...@googlegroups.com
Esto es desesperante...

Hernando, he probado a poner delante el PDF, de echo antes lo tenía así y nada.

José Victor, He probado a poner solo cómo MIME PDF y nada, he cambiado esas líneas de la librería upload que viene en el wiki y nada

Nekrosis, el peso no puede ser el problema ya que estoy probando con archivos de 200k y además en otros proyecto con Drupal me subía archivos de varios megas sin problema.

Lo del MAMP tampoco es ya que estoy probando ahora con Appserv en Windows Vista.

Alguien me puede deir que significa esto (C:\Windows\TEMP\php7DD9.tmp [error] ), ya que es parte de lo que pinta print_r($_FILES). concretamente:
Array ( [documento] => Array ( [name] => vivir-del-software.pdf [type] => application/pdf [tmp_name] => C:\Windows\TEMP\php7DD9.tmp [error] => 0 [size] => 226063 ) ) Array ( [documento] => Array ( [name] => vivir-del-software.pdf [type] => application/pdf [tmp_name] => C:\Windows\TEMP\php7DD9.tmp [error] => 0 [size] => 226063 ) ) Array ( [documento] => Array ( [name] => vivir-del-software.pdf [type] => application/pdf [tmp_name] => C:\Windows\TEMP\php7DD9.tmp [error] => 0 [size] => 226063 ) )


Estoy empezando a pensar en recurrir a una solución PHP al margen de la librería upload.

¿Que pensáis?

Norter

unread,
Oct 8, 2009, 4:44:43 AM10/8/09
to codeignit...@googlegroups.com
Algo debes de tener mal en el formulario, te está mostrando 3 veces el
mismo archivo.

La libreria upload, no tiene casi nada y con el ejemplo que te viene,
deberia rularte sin problema, haz una prueba rápida.-

VISTA
----------
<?php echo form_open_multipart('admin/clase/do_upload');?>

<input type="file" name="userfile" size="20" />

<br /><br />

<input type="submit" value="upload" />

</form>


CONTROLLER clase
----------------
public function do_upload(){
echo '<pre>';
print_r($_FILES);
echo '</pre>';
exit();
}

Y tronch, con esto te debería de funcionar..., mirate de todos modos los
logs, y asegurate de que tengas 777 en la carpeta de subida, aunque si...

Bueno, se me está ocurriendo la siguiente prueba, supongo que estarás
iendo a urls amigables, con lo que puedes hacer es, si por ejemplo tienes
la carpeta en la raiz del proyecto y se llama uploads, haz la llamada de
este tipo a ver si te abre el archivo, o por el contrario te lo reconoce
como un controlador,

http://localhost/uploads/archivo-1.pdf

En caso de que te lo detecte como un controlador, es por el htaccess, en
el cual le podrías poner algo rollo (dependiendo del tipo de configuración
de carpetas que tengas, pero lo importante es donde aparecen las
extensiones permitidas).-

RewriteEngine on
RewriteCond $1
!^(index\.php|application/views/|robots\.txt|^(.*)\.html|install|favicon\.ico|^(.*)\.php|^(.*)\.js|^(.*)\.css|^(.*)\.png|^(.*)\.gif|^(.*)\.jpg|^(.*)\.pdf|^(.*)\.txt|^(.*)\.xls|^(.*)\.swf)
RewriteRule ^(.*)$ index.php?/$1 [L]

Un saludo.

chau ;)


> Esto es desesperante...
>
> Hernando, he probado a poner delante el PDF, de echo antes lo tenía así
> y
> nada.
>
> José Victor, He probado a poner solo cómo MIME PDF y nada, he cambiado
> esas
> líneas de la librería upload que viene en el wiki y nada
>
> Nekrosis, el peso no puede ser el problema ya que estoy probando con
> archivos de 200k y además en otros proyecto con Drupal me subía archivos
> de
> varios megas sin problema.
>
> Lo del MAMP tampoco es ya que estoy probando ahora con Appserv en Windows
> Vista.
>
> Alguien me puede deir que significa esto (C:\Windows\TEMP\php7DD9.tmp
> [error] ), ya que es parte de lo que pinta print_r($_FILES).
> concretamente:
> Array ( [documento] => Array ( [name] => vivir-del-software.pdf [type] =>
> application/pdf [tmp_name] => C:\Windows\TEMP\php7DD9.tmp [error] => 0
> [size] => 226063 ) ) Array ( [documento] => Array ( [name] =>
> vivir-del-software.pdf [type] => application/pdf [tmp_name] =>
> C:\Windows\TEMP\php7DD9.tmp [error] => 0 [size] => 226063 ) ) Array (
> [documento] => Array ( [name] => vivir-del-software.pdf [type] =>
> application/pdf [tmp_name] => C:\Windows\TEMP\php7DD9.tmp [error] => 0
> [size] => 226063 ) )
>
>
> Estoy empezando a pensar en recurrir a una solución PHP al margen de la
> librería upload.
>
> ¿Que pensáis?
>
>
>
>
> El 8 de octubre de 2009 06:00, Nokrosis <nokr...@gmail.com> escribió:
>
>> Necesitas permitirlo en 2 lugares:
>> 1. En la configuración de la clase del upload
>> 2. En el php.ini hay un parámetro llamado max_upload_filesize (o algo
>> parecido)
>>
>> Si planeas que el archivo sea mucho más grande, tal vez debas
>> establecer
>> también en el php.ini el max_execution_time.
>>
>> Saludos.
>>
>> 2009/10/7 jose victor ramos sanchez <joze...@gmail.com>
>>
>> Asi por no dejar; ¿Que hay del tamaño del archivo?, no afecta en nada
>> ?.
>>>
>>> 2009/10/7 Hernando Gisinger <hgis...@gmail.com>
>>>
>>> CodeIgniter tiene un bug cuando en la lista de tipos hay imagenes y no
>>>> imagenes
>>>>
>>>> http://codeigniter.com/bug_tracker/bug/6780/
>>>>
>>>> El 7 de octubre de 2009 15:33, Hernando Gisinger
>>>> <hgis...@gmail.com>escribió:
>>>>
>>>> La última prueba, ya no me quedan más ideas :(
>>>>>
>>>>> En la lista pon primero pdf, deja las imagenes al final
>>>>>
>>>>> Saludos
>>>>>
>>>>> El 7 de octubre de 2009 14:22, Fernando Val
>>>>> <aaro...@gmail.com>escribió:
>>>>>
>>>>> Acabo de probarlo en Windows Vista con Appserv, y nada de nada...
>>>>>> Que desesperación... pfffffff.
>>>>>>
>>>>>> El 7 de octubre de 2009 18:56, Hernando Gisinger
>>>>>> <hgis...@gmail.com>escribió:
>>>>>>
>>>>>> Prueba reemplazando en mimes.php
>>>>>>>
>>>>>>> 'pdf' => array('application/pdf', 'application/x-download'),
>>>>>>>
>>>>>>> por
>>>>>>>
>>>>>>> 'pdf' => array('application/pdf', 'application/x-download',
>>>>>>> 'text/html'),
>>>>>>>
>>>>>>>
>>>>>>> Saludos
>>>>>>>
>>>>>>> El 7 de octubre de 2009 13:20, Fernando Val
>>>>>>> <aaro...@gmail.com>escribió:
>>>>>>>
>>>>>>>> Me devuelve esto:
>>>>>>>> Array ( [documento] => Array ( [name] => bluebrintcss.pdf [type]
>>>>>>>> =>
>>>>>>>> text/html [tmp_name] => /Applications/MAMP/tmp/php/phpeTz4nH
>>>>>>>> [error] => 0
>>>>>>>> [size] => 37752 ) ) Array ( [documento] => Array ( [name] =>
>>>>>>>> bluebrintcss.pdf [type] => text/html [tmp_name] =>
>>>>>>>> /Applications/MAMP/tmp/php/phpeTz4nH [error] => 0 [size] => 37752
>>>>>>>> ) ) Array
>>>>>>>> ( [documento] => Array ( [name] => bluebrintcss.pdf [type] =>
>>>>>>>> text/html
>>>>>>>> [tmp_name] => /Applications/MAMP/tmp/php/phpeTz4nH [error] => 0
>>>>>>>> [size] =>
>>>>>>>> 37752 ) )
>>>>>>>> Y ni rastro del MIME... ¿Tu ves algo que te de una pista?
>>>>>>>> Gracias.
>>>>>>>>
>>>>>>>> El 7 de octubre de 2009 17:57, Nokrosis
>>>>>>>> <nokr...@gmail.com>escribió:
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Imprime la variable global $_FILES y verifica el mime que te
>>>>>>>>> manda:
>>>>>>>>>
>>>>>>>>> print_r($_FILES);
>>>>>>>>>
>>>>>>>>> Checa si ese mime está en el archivo mimes.php y si no,
>>>>>>>>> vinculalo
>>>>>>>>> con la extensión.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2009/10/7 Fernando Val <aaro...@gmail.com>
>>>>>>>>>
>>>>>>>>>> Pues mi gozo en un pozo... en IE7 y IE6 no funciona...
>>>>>>>>>> ¿Alguna idea más por ahí?
>>>>>>>>>> Sigo pensando que puede ser un problema del MAMP, esta noche
>>>>>>>>>> pruebo
>>>>>>>>>> en casa en windows con Appserv...
>>>>>>>>>>
>>>>>>>>>> El 7 de octubre de 2009 17:49, Fernando Val
>>>>>>>>>> <aaro...@gmail.com>escribió:
>>>>>>>>>>
>>>>>>>>>>> Pues lo acabo de probar en Safary y sigue fallando.. Voy a
>>>>>>>>>>> porbar
>>>>>>>>>>> en IE7...
>>>>>>>>>>>
>>>>>>>>>>> El 7 de octubre de 2009 17:45, Fernando Val
>>>>>>>>>>> <aaro...@gmail.com>escribió:
>>>>>>>>>>>
>>>>>>>>>>>> Pues la verdad es que solo lo he porbado en Firefox...
>>>>>>>>>>>> Ahora voya probar a ver y luego me leo detenidamente el wiki.
>>>>>>>>>>>> Por
>>>>>>>>>>>> cierto, ¿que búsqueda has echo para encontra esa página del
>>>>>>>>>>>> wiki? Porque yo
>>>>>>>>>>>> he puscado y nada...
>>>>>>>>>>>> Muchas gracias
>>>>>>>>>>>> El 7 de octubre de 2009 17:36, Hernando Gisinger <
>>>>>>>>>>>> hgis...@gmail.com> escribió:
>>>>>>>>>>>>
>>>>>>>>>>>>> El problema es solo con firefox 3 o con explorer tambien? Hay
>>>>>>>>>>>>> un
>>>>>>>>>>>>> bug en FF 3 y aca dice como arreglarlo:
>>>>>>>>>>>>>
>>>>>>>>>>>>> http://codeigniter.com/bug_tracker/bug/4906/
>>>>>>>>>>>>>
>>>>>>>>>>>>> El 7 de octubre de 2009 12:14, Fernando Val <
>>>>>>>>>>>>> aaro...@gmail.com> escribió:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Nada, me sigue dando el mismo error... :-(
>>>>>>>>>>>>>> Gracias de todos modos.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> El 7 de octubre de 2009 16:59, Hernando Gisinger <
>>>>>>>>>>>>>> hgis...@gmail.com> escribió:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Prueba haciendo:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> $this->upload->set_allowed_types('gif|jpg|png|jpeg|doc|pdf|txt|text|xlsx|xl');
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> antes de esta línea:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> if (!$this->upload->do_upload("documento")){
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Saludos
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> El 7 de octubre de 2009 11:39, Fernando Val <
>>>>>>>>>>>>>>> aaro...@gmail.com> escribió:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Ya tengo el error:
>>>>>>>>>>>>>>>> The filetype you are attempting to upload is not allowed.
>>>>>>>>>>>>>>>> Estoy tratando de usbir un pdf, doc y xls y nada y sin
>>>>>>>>>>>>>>>> embargo pongo esto en la config:
>>>>>>>>>>>>>>>> $config['allowed_types'] =
>>>>>>>>>>>>>>>> 'gif|jpg|png|jpeg|doc|pdf|txt|text|xlsx|xl';
>>>>>>>>>>>>>>>> En la documentación no me queda claro si hay una forma de
>>>>>>>>>>>>>>>> permitir cualquier formato
>>>>>>>>>>>>>>>> ¿Alguien sabe de esto?
>>>>>>>>>>>>>>>> Aunque he pobado ha montar un ejemplo muy sencillito de un
>>>>>>>>>>>>>>>> tutorial que se supone que debe funcionar y me pasa lo
>>>>>>>>>>>>>>>> msimo, sube imágenes
>>>>>>>>>>>>>>>> pero no documentos.
>>>>>>>>>>>>>>>> Empiezo a pensar que es un problema de mis MAMP en local,
>>>>>>>>>>>>>>>> quizas en el servidor de producción no dé este bug...
>>>>>>>>>>>>>>>> ¿QUe opináis?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> El 7 de octubre de 2009 16:11, Fernando Val <
>>>>>>>>>>>>>>>> aaro...@gmail.com> escribió:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Pues soy incapaz de hacerlo aparcer el error, que os
>>>>>>>>>>>>>>>>> parece,
>>>>>>>>>>>>>>>>> he probado a ponerlo tanto en listado que es donde
>>>>>>>>>>>>>>>>> redirecciono al final,
>>>>>>>>>>>>>>>>> cómo en la vista del formulario, tal que así
>>>>>>>>>>>>>>>>> Controlador:
>>>>>>>>>>>>>>>>> $error = array('error' =>
>>>>>>>>>>>>>>>>> $this->upload->display_errors());
>>>>>>>>>>>>>>>>> $this->session->set_flashdata('message', 'El
>>>>>>>>>>>>>>>>> <strong>documento</strong> no ha podido subir');
>>>>>>>>>>>>>>>>> //redirect("admin/documentos/index");
>>>>>>>>>>>>>>>>> $this->auth->view('documentos/create', $error);
>>>>>>>>>>>>>>>>> En la vista index (listado) y en la vista create, he
>>>>>>>>>>>>>>>>> puesto:
>>>>>>>>>>>>>>>>> <?php if (validation_errors()): ?>
>>>>>>>>>>>>>>>>> <h1><div><?php echo $error;?></div></h1>
>>>>>>>>>>>>>>>>> <div class='flash wrong'><?php echo
>>>>>>>>>>>>>>>>> validation_errors();
>>>>>>>>>>>>>>>>> ?></div>
>>>>>>>>>>>>>>>>> <?php endif; ?
>>>>>>>>>>>>>>>>> Lo he puesto de las dos formas para ver si alguna de
>>>>>>>>>>>>>>>>> ellas
>>>>>>>>>>>>>>>>> rulaba...
>>>>>>>>>>>>>>>>> Vamos que no saco el error ni para atras
>>>>>>>>>>>>>>>>> El 7 de octubre de 2009 15:52, Fernando Val <
>>>>>>>>>>>>>>>>> aaro...@gmail.com> escribió:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Seré... ejem. Perdonadme, no era por pereza, era
>>>>>>>>>>>>>>>>>> desesperación. :-)
>>>>>>>>>>>>>>>>>> Estoy viendo la docuemntación y ya se donde va el error
>>>>>>>>>>>>>>>>>> reporting, ahora trataré de que me lo muestre la vista
>>>>>>>>>>>>>>>>>> y os digo cual es el
>>>>>>>>>>>>>>>>>> error que devuelve...
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> El 7 de octubre de 2009 15:13, Fernando Val <
>>>>>>>>>>>>>>>>>> aaro...@gmail.com> escribió:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> No, no he puesto para que devuelva el error, porque no
>>>>>>>>>>>>>>>>>>> tengo muy claro donde ponerlo y donde recogerlo.
>>>>>>>>>>>>>>>>>>> Si me echas un cable y me dices donde iría, lo
>>>>>>>>>>>>>>>>>>> pongo...
>>>>>>>>>>>>>>>>>>> De momento sólo me manejo con los flashdata.
>>>>>>>>>>>>>>>>>>> Muchas gracias de todos modos
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> El 7 de octubre de 2009 14:45, Nokrosis <
>>>>>>>>>>>>>>>>>>> nokr...@gmail.com> escribió:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Qué error te marca?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 2009/10/7 Fernando Val <aaro...@gmail.com>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Hola amigos,
>>>>>>>>>>>>>>>>>>>>> Tengo un pproblema que me está volviendo loco y ya
>>>>>>>>>>>>>>>>>>>>> no se
>>>>>>>>>>>>>>>>>>>>> que hacer ni que mirar.
>>>>>>>>>>>>>>>>>>>>> Resulta que estoy utilizando una función crear
>>>>>>>>>>>>>>>>>>>>> imágenes
>>>>>>>>>>>>>>>>>>>>> que para imágenes funciona a las mil maravillas,
>>>>>>>>>>>>>>>>>>>>> pero ahora lo estoy
>>>>>>>>>>>>>>>>>>>>> aplicando en otro modelo para subir sólo documentos
>>>>>>>>>>>>>>>>>>>>> de tipo no imagen.
>>>>>>>>>>>>>>>>>>>>> Lo he adaptado. sobre todo los MIME y he quitado la
>>>>>>>>>>>>>>>>>>>>> configuración y creación de thumbnail y para
>>>>>>>>>>>>>>>>>>>>> imagenes me sigue funcionando y
>>>>>>>>>>>>>>>>>>>>> cuando intento subir otro tipo de archivos (PDF por
>>>>>>>>>>>>>>>>>>>>> ejemplo) no suben y por
>>>>>>>>>>>>>>>>>>>>> tanto me salta al bucle de error de lafunción.
>>>>>>>>>>>>>>>>>>>>> ¿Algún alma caritativa me puede ayudar?
>>>>>>>>>>>>>>>>>>>>> Este es controlador (documentos):
>>>>>>>>>>>>>>>>>>>>> (aviso de que utilizo el model de archivos para subir
>>>>>>>>>>>>>>>>>>>>> los del controler documentos).
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>>>>>>>>>>>>>>>>>>>>> function create() {
>>>>>>>>>>>>>>>>>>>>> // Validaciones
>>>>>>>>>>>>>>>>>>>>> $this->_validation();
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> if($this->form_validation->run())
>>>>>>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> // Poblamos el array $datoss con los valores
>>>>>>>>>>>>>>>>>>>>> enviados
>>>>>>>>>>>>>>>>>>>>> por el formulario
>>>>>>>>>>>>>>>>>>>>> $datos['title'] = $this->input->post('title',
>>>>>>>>>>>>>>>>>>>>> TRUE);
>>>>>>>>>>>>>>>>>>>>> $datos['category'] = "documento";
>>>>>>>>>>>>>>>>>>>>> $datos['file'] = $this->input->post('file', TRUE);
>>>>>>>>>>>>>>>>>>>>> $datos['body'] = $this->input->post('body', TRUE);
>>>>>>>>>>>>>>>>>>>>> $datos['status'] =$this->input->post('status',
>>>>>>>>>>>>>>>>>>>>> TRUE);
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> $this->_array_create();
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> // Cargamo la librería upload con sus ajustes de
>>>>>>>>>>>>>>>>>>>>> configuración
>>>>>>>>>>>>>>>>>>>>> $config['upload_path'] = './assets/archivos/';
>>>>>>>>>>>>>>>>>>>>> $config['allowed_types'] =
>>>>>>>>>>>>>>>>>>>>> 'gif|jpg|png|jpeg|doc|pdf|txt|text|xlsx|xl';
>>>>>>>>>>>>>>>>>>>>> $config['max_size'] = '0';
>>>>>>>>>>>>>>>>>>>>> $this->load->library('upload', $config);
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> // Comprobamos si el archivo ha subido
>>>>>>>>>>>>>>>>>>>>> if (!$this->upload->do_upload("documento")){
>>>>>>>>>>>>>>>>>>>>> $this->session->set_flashdata('message', 'El
>>>>>>>>>>>>>>>>>>>>> <strong>documento</strong> no ha podido subir');
>>>>>>>>>>>>>>>>>>>>> //redirect("admin/documentos/index");
>>>>>>>>>>>>>>>>>>>>> } else {
>>>>>>>>>>>>>>>>>>>>> $datos_upload = $this->upload->data();
>>>>>>>>>>>>>>>>>>>>> $datos['file'] = $datos_upload['file_name'];
>>>>>>>>>>>>>>>>>>>>> // Ya que solo quiero que los guarde cómo
>>>>>>>>>>>>>>>>>>>>> documento en
>>>>>>>>>>>>>>>>>>>>> la BDD
>>>>>>>>>>>>>>>>>>>>> //$datos['category']= 'documento';
>>>>>>>>>>>>>>>>>>>>> $this->content->add($datos);
>>>>>>>>>>>>>>>>>>>>> $this->session->set_flashdata('message', 'El
>>>>>>>>>>>>>>>>>>>>> <strong>
>>>>>>>>>>>>>>>>>>>>> documento '.$datos['file'] .'</strong> ha sido
>>>>>>>>>>>>>>>>>>>>> creado');
>>>>>>>>>>>>>>>>>>>>> //edirect("admin/documentos/index");
>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>> else
>>>>>>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>>>>>>> // Si falla la validacion seguimos en el view add
>>>>>>>>>>>>>>>>>>>>> $this->auth->view('archivos/create');
>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Este es el formulario del view documentos/create:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>>>>>>>>>>>>>>>>>>>>> <!-- formulario -->
>>>>>>>>>>>>>>>>>>>>> <?php echo form_open_multipart('admin/' .
>>>>>>>>>>>>>>>>>>>>> $model_plur .
>>>>>>>>>>>>>>>>>>>>> '/create/');?>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> <label>Título:</label><br/>
>>>>>>>>>>>>>>>>>>>>> <input class="input" name="title" value=""
>>>>>>>>>>>>>>>>>>>>> size="20"
>>>>>>>>>>>>>>>>>>>>> maxlength="255" /><br/><br/>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> <label>Archivo:</label><br/>
>>>>>>>>>>>>>>>>>>>>> <input type="file" name="documento" value=""
>>>>>>>>>>>>>>>>>>>>> /><br/><br/>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> <label>Descripción:</label><br/>
>>> <☼<allende>☼>

Fernando Val

unread,
Oct 8, 2009, 7:40:55 AM10/8/09
to codeignit...@googlegroups.com
Hola Norter, no hay manera., chico.

He probado lo del PDF y me lo cargaba en la ventana del navegador.
He probado lo de httaccess, primero quitandolo directamente y nada, luego he puesto el tuyo tal cual, y nada...
Tema permisos no es, comprobado.
He probado tu formulario y me devuelve esto:
Array
(
[userfile] => Array

(
[name] => vivir-del-software.pdf
[type] => application/pdf
            [tmp_name] => C:\Windows\TEMP\php304F.tmp

[error] => 0
[size] => 226063
)

)
Lo cual en teoría es que correcto.
Pero luego a la función upload_do
le he ido añdiendo las líneas que procesan el archivo para subirlo y eso tal que así;

            $config['upload_path'] = './assets/archivos/';
            $config['allowed_types'] = 'doc|pdf|txt|text|xlsx|xl';

            $this->load->library('upload', $config);
                          
            if (!$this->upload->do_upload("userfile")){ 
               echo '<pre>';
               print_r($_FILES);
               echo '</pre>';
               exit();           
            } else {
               echo '<pre>';
               print("OK, ha subido");
               echo '</pre>';              
             }     

Y nada de nada, en cambio con imágenes sigue funcionando en cada uno de los casos...

Muchas gracias de todos modos, muchas gracias a todos, desde luego estáis intentado echarme un cable.

Nokrosis

unread,
Oct 8, 2009, 8:39:42 AM10/8/09
to codeignit...@googlegroups.com
if (!$this->upload->do_upload("userfile")){ 
               echo '<pre>';
               print_r($_FILES);
               echo '</pre>';
               exit();           
            } else {
               echo '<pre>';
               print("OK, ha subido");
               echo '</pre>';              
             }     

Cual es el resultado que obtienes con este código con tu archivo pdf? supongo que este:

Array
(
[userfile] => Array

(
[name] => vivir-del-software.pdf
[type] => application/pdf

[tmp_name] => C:\Windows\TEMP\php304F.tmp
[error] => 0
[size] => 226063
)

)

Imprime también el error de la clase upload, para que sepas exactamente por donde va el error y no estar dando palos de ciego. ya que puede ser el tipo de archivo o incluso la ruta de escritura.

Envíanos el print_r($_FILES) junto con el error que te manda la clase upload.



2009/10/8 Fernando Val <aaro...@gmail.com>

Fernando Val

unread,
Oct 8, 2009, 8:54:10 AM10/8/09
to codeignit...@googlegroups.com
Si eso es

Norter

unread,
Oct 8, 2009, 1:17:21 PM10/8/09
to codeignit...@googlegroups.com

A mi con un cliente me paso algo similar, pero no con pdfs sino con imágenes, y efectivamente no hubo manera de subir esas imágenes, había algo en el guardado de esos archivos que no lo reconocía el Server, al final con el guardar para web de photoshop a jpg, terminó por pillarlos (creo que era por la resolución o el modo de color, no recuerdo bien). Así que nada, lo mismo te ocurre algo por el estilo, prueba con pdfs que estén colgados en alguna web a ver si te deja, y sino.

 


Hernando Gisinger

unread,
Oct 8, 2009, 3:01:12 PM10/8/09
to codeignit...@googlegroups.com
Te paso la función que valida el tipo de archivos con algunos print que muestra lo que va validando. Por favor reemplaza la que está en system/libraries/Upload.php por esta. No te olvides de hacer un backup con la original. Envía lo que te muestra.

Saludos

/**
     * Verify that the filetype is allowed
     *
     * @access    public
     * @return    bool
     */   
    function is_allowed_filetype()
    {
        if (count($this->allowed_types) == 0 OR ! is_array($this->allowed_types))
        {
            print 'allowed_types esta vacio o no es un array<br>';
            $this->set_error('upload_no_file_types');
            return FALSE;
        }

        $image_types = array('gif', 'jpg', 'jpeg', 'png', 'jpe');
       
        print 'el tipo de archivo es ' . $this->file_type . '<br>';

        foreach ($this->allowed_types as $val)
        {
            $mime = $this->mimes_types(strtolower($val));

            // Images get some additional checks
            if (in_array($val, $image_types))
            {
                if (getimagesize($this->file_temp) === FALSE)
                {
                    print 'se esta validando como si fuera una imagen<br>';
                    return FALSE;
                }
            }

            if (is_array($mime))
            {
                print 'buscando en array<br>';
                print_r($mime);
                if (in_array($this->file_type, $mime, TRUE))
                {
                    return TRUE;
                }
            }
            else
            {
                print 'comparando con: ' . $mime . '<br>';
                if ($mime == $this->file_type)
                {
                    return TRUE;
                }   
            }       
        }
       
        return FALSE;

Fernando Val

unread,
Oct 9, 2009, 3:37:33 AM10/9/09
to codeignit...@googlegroups.com
Hola Norte,

Los PDFs que intento subir son bajados de web, son ebooks, cheatsheets, etc y sólo pesan entre 200 y 500k.

Hernando, he cambiado la función en el upload y me pinta esto:


el tipo de archivo es application/pdf
buscando en array
Array ( [0] => image/jpeg [1] => image/pjpeg ) se esta validando como si fuera una imagen

The filetype you are attempting to upload is not allowed.


Por lo que veo no los trata cómo MIME sino cómo imágenes. ¿A que puede ser debido si en mi controller pone esto?:

        $config['upload_path'] = './assets/archivos/';
        $config['allowed_types'] = 'pdf|gif|jpg|png';
        $config['max_size']    = '0';
        $config['max_width']  = '1024';
        $config['max_height']  = '768';

Incluso he probado así:

        $config['upload_path'] = './assets/archivos/';
        $config['allowed_types'] = 'pdf';

Y lo mismo...


Muchas gracias

Hernando Gisinger

unread,
Oct 9, 2009, 6:01:53 AM10/9/09
to codeignit...@googlegroups.com
Por favor, pega el contenido del archivo mimes.php, está en config

Saludos

Fernando Val

unread,
Oct 9, 2009, 6:25:42 AM10/9/09
to codeignit...@googlegroups.com
EUREKA!!!!!

Ahí esta el bicho:


                'pdf'    =>    array('application/pdf', 'application/x-download'),
               
                'pdf'    =>    array('image/jpeg', 'image/pjpeg'),

No se de donde ha podido salir esa línea, pero desde luego era la que estaba dando por...
La he eliminado y ya está, ya suben sin problemas.

Muchas gracias, Hernando, te debo una y muy grande ya que me has salvado el pellejo y de que manera.
Soy diseñador y controlo bastante de CSS y jQuery(bueno algo menos, jejeje) y si en algún momento necesitas ayuda, ya sabes. Bueno y a todos los demás que habéis tratado de ayudarme también. Pero Hernando desde luego se lleva el premio gordo... jejejeje

Muchas gracias a todos y hasta el próximo problemilla...

Fernando Val

unread,
Oct 19, 2009, 11:17:46 AM10/19/09
to codeignit...@googlegroups.com
Hola amigos,

A vueltas de nuevo con este problema.

Os cuento:
Ahora resulta que al subir la aplicación a producción, me reaparece el problema con el MIME de los PDFs y sólo con ellos.
Bien, pues resulta que he tenido que añadir en el array de 'pdf' en config/mimes.php esto:
'pdf'    =>    array('application/pdf', 'application/x-download', 'text/html', 'octet/stream'),

Ya que en ese servidor en concreto me los estaba reconociendo cómo octet/stream.

¿Alguien sabe algo de esto?
¿Sabéis is me puede dar algún problema en el futuro?

De momento, así se va a quedar...

Gracias.

Nokrosis

unread,
Oct 19, 2009, 11:38:49 AM10/19/09
to codeignit...@googlegroups.com
Teóricamente no debería generarte ningún problema. El tipo mime octet/stream por lo general se aplica a archivos binarios y el pdf es un archivo binario.

Si te funciona bien con ese mime y puedes subir y descargar el pdf sin problemas, no debe haber ningún problema futuro.

Saludos

2009/10/19 Fernando Val <aaro...@gmail.com>

Fernando Val

unread,
Oct 19, 2009, 11:46:26 AM10/19/09
to codeignit...@googlegroups.com
Gracias Nokrosis, me quitas un peso de encima, porque no las tenía todas conmigo...

De todos modos, es que el administrador de sistemas de mi empresa es u poco especial, porque nuestro servidor me va dando cada sorpresa de configuración. Y lo bueno es que se niega a cambiar nada... con deciros que hasta el año pasado se negaba a poder soportar vídeo flv, y nos teníamos que biuscar la vida con quicktime y wmp, casí nada...
Reply all
Reply to author
Forward
0 new messages