Validar upload de fichero csv

689 views
Skip to first unread message

Pablo Braulio

unread,
Sep 19, 2011, 2:01:39 PM9/19/11
to symfo...@googlegroups.com
Hola a todos.

He creado un formulario para subir un fichero .csv. Quiera poder validar
que el fichero que se sube es de este tipo y no lo consigo. Adem�s al
subirlo le asigna la extensi�n .txt.

�Alguien sabr�a decirme como puedo hacerlo?.

He usado esto pero no funciona.

$this->setValidator('fichero', new sfValidatorFile(array(
'required'=>true,
'mime_types'=>array('text/comma-separated-values')
), array(
'required'=>'No has seleccionado ning�n fichero.',
'mime_types'=>'El archivo no tiene un formato v�lido.'
)));
--
Saludos cordiales.
Pablo.

Si lo reenv�as, ten la precauci�n de borrar los datos de procedencia que
encabezar�an tu reenv�o � empezando por mi direcci�n de correo
electr�nico - . Coloca siempre las direcciones de tus contactos en el
campo <CCO> para que viajen discretas, no en el campo <Para> ni en
el<CC>. De esa forma nadie que lo reciba tendr� constancia de las se�as
de los dem�s destinatarios a los que tambi�n se remite. Todo ello a fin
de evitar que nadie se aproveche de todas las direcciones que se van
acumulando al pasar de buz�n a buz�n para el lanzamiento de correo
basura y otras indeseadas lindezas. Aparte claro est� de garantizar la
privacidad.

se bardo

unread,
Sep 20, 2011, 4:07:43 AM9/20/11
to symfo...@googlegroups.com
Podrias probar agregando  a tu validacion el siguiente tipo MIME

"text/csv"
                  

El 19 de septiembre de 2011 20:01, Pablo Braulio <bru...@gmail.com> escribió:
Hola a todos.

He creado un formulario para subir un fichero .csv. Quiera poder validar que el fichero que se sube es de este tipo y no lo consigo. Además al subirlo le asigna la extensión .txt.

¿Alguien sabría decirme como puedo hacerlo?.


He usado esto pero no funciona.

$this->setValidator('fichero', new sfValidatorFile(array(
           'required'=>true,
           'mime_types'=>array('text/comma-separated-values')
       ), array(
           'required'=>'No has seleccionado ningún fichero.',
           'mime_types'=>'El archivo no tiene un formato válido.'

       )));
--
Saludos cordiales.
Pablo.

Si lo reenvías, ten la precaución de borrar los datos de procedencia que
encabezarían tu reenvío – empezando por mi dirección de correo
electrónico - . Coloca siempre las direcciones de tus contactos en el

campo <CCO> para que viajen discretas, no en el campo <Para> ni en
el<CC>. De esa forma nadie que lo reciba tendrá constancia de las señas
de los demás destinatarios a los que también se remite. Todo ello a fin

de evitar que nadie se aproveche de todas las direcciones que se van
acumulando al pasar de buzón a buzón para el lanzamiento de correo
basura y otras indeseadas lindezas. Aparte claro está de garantizar la
privacidad.

--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a symfo...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a symfony-es+unsubscribe@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/symfony-es?hl=es.


Pablo Braulio

unread,
Sep 20, 2011, 5:15:24 AM9/20/11
to symfo...@googlegroups.com
Ya lo había probado y no funciona. A no ser que te refieras a ponerlo, ademas de lo que ya hay.

Para anular tu suscripción a este grupo, envía un correo electrónico a symfony-es+...@googlegroups.com

Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/symfony-es?hl=es.



--

se bardo

unread,
Sep 20, 2011, 5:29:05 AM9/20/11
to symfo...@googlegroups.com
Exacto hice algo parecido y coloqué los dos tipos MIME

if (  ($_FILES["file"]["type"] == "text/csv")   || ($_FILES["file"]["type"] == "text/comma-separated-values")  )

pero termine descartando esta opcion porque desde widows cuando el cliente  guarda el xls como csv no lo guarda con estos tipos mime correctos como deberia ser, asique recurri a la siguiente validacion

$trozos = explode(".", $_FILES["file"]["name"]);
$extension = end($trozos);
if($extension = 'csv'){
   ....
}

Espero te sirva
Saludos

david

unread,
Sep 20, 2011, 7:29:57 AM9/20/11
to symfony-es
Prueba con el mime type :

'mime_types' => array('application/vnd.ms-excel'),

A mi me funciona, porque el csv viene de excel.



On 19 sep, 20:01, Pablo Braulio <brul...@gmail.com> wrote:
> Hola a todos.
>
> He creado un formulario para subir un fichero .csv. Quiera poder validar
> que el fichero que se sube es de este tipo y no lo consigo. Adem s al
> subirlo le asigna la extensi n .txt.
>
> Alguien sabr a decirme como puedo hacerlo?.
>
> He usado esto pero no funciona.
>
> $this->setValidator('fichero', new sfValidatorFile(array(
>              'required'=>true,
>              'mime_types'=>array('text/comma-separated-values')
>          ), array(
>              'required'=>'No has seleccionado ning n fichero.',
>              'mime_types'=>'El archivo no tiene un formato v lido.'
>          )));
> --
> Saludos cordiales.
> Pablo.
>
> Si lo reenv as, ten la precauci n de borrar los datos de procedencia que
> encabezar an tu reenv o empezando por mi direcci n de correo
> electr nico - . Coloca siempre las direcciones de tus contactos en el
> campo <CCO> para que viajen discretas, no en el campo <Para> ni en
> el<CC>. De esa forma nadie que lo reciba tendr constancia de las se as
> de los dem s destinatarios a los que tambi n se remite. Todo ello a fin
> de evitar que nadie se aproveche de todas las direcciones que se van
> acumulando al pasar de buz n a buz n para el lanzamiento de correo
> basura y otras indeseadas lindezas. Aparte claro est de garantizar la
> privacidad.

Pablo Braulio

unread,
Sep 20, 2011, 7:36:28 AM9/20/11
to symfo...@googlegroups.com
Gracias, lo probaré.

> privacidad.

--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a symfo...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a symfony-es+...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/symfony-es?hl=es.




--
--
Saludos cordiales.
Pablo.

Si lo reenvías, ten la precaución de borrar los datos de procedencia que
encabezarían tu reenvío – empezando por mi dirección de correo
electrónico - . Coloca siempre las direcciones de tus contactos en el

campo <CCO> para que viajen discretas, no en el campo <Para> ni en
el<CC>. De esa forma nadie que lo reciba tendrá constancia de las señas
de los demás destinatarios a los que también se remite. Todo ello a fin

de evitar que nadie se aproveche de todas las direcciones que se van

se bardo

unread,
Sep 20, 2011, 7:43:03 AM9/20/11
to symfo...@googlegroups.com
Esto es un tipo mime de xls no de csv,
Description for mime application/vnd.ms-excel [official]

Y calculo es un error al exportar los datos de un excel desde Microsoft Office
A esto me referia con que si no usas Open Office los tipos mime no se guardan correctamente.
Y como no puedo estar dependiendo de esto hago una validacion por extension.

El 20 de septiembre de 2011 13:29, david <dav...@gmail.com> escribió:
> privacidad.

se bardo

unread,
Sep 20, 2011, 7:44:46 AM9/20/11
to symfo...@googlegroups.com
Y con ello validarias si el archivo es un xls y no un csv, pero si te sirve esta bien , el hecho es que si se esta importando un xls y esperabas un cvs esta validacion no sirve.

Pablo Braulio

unread,
Sep 22, 2011, 3:52:08 AM9/22/11
to symfo...@googlegroups.com
Bueno, gracias por el aporte, pero al final lo he solucionado con un validador.

class csvValidator extends sfValidatorBase{
public function configure($options= array(), $messages= array()){
$this->addOption('fichero_field', 'fichero');
$this->addOption('throw_global_error', false);
$this->setMessage('invalid', 'No has subido un fichero ".csv".');
parent::configure($options, $messages);
}
protected function doClean($value) {
$fichero= isset($value[$this->getOption('fichero_field')]) ? $value[$this->getOption('fichero_field')] : '';
if($fichero){
$extension= $fichero->getOriginalExtension();

//Comprobar extension.
if($extension== '.csv'){
return $value;
}
}
if ($this->getOption('throw_global_error'))
{
 throw new sfValidatorError($this, 'invalid');
}

throw new sfValidatorErrorSchema($this, array($this->getOption('fichero_field') => new sfValidatorError($this, 'invalid')));
--
--
Saludos cordiales.
Pablo.

Si lo reenvías, ten la precaución de borrar los datos de procedencia que
encabezarían tu reenvío – empezando por mi dirección de correo
electrónico - . Coloca siempre las direcciones de tus contactos en el

campo <CCO> para que viajen discretas, no en el campo <Para> ni en
el<CC>. De esa forma nadie que lo reciba tendrá constancia de las señas
de los demás destinatarios a los que también se remite. Todo ello a fin

de evitar que nadie se aproveche de todas las direcciones que se van

se bardo

unread,
Sep 22, 2011, 4:38:14 AM9/22/11
to symfo...@googlegroups.com
Bueno termina siendo lo que te pase no ?

//Comprobar extension.
if($extension== '.csv'){
return $value;
}

Me alegro que te haya servido.

Alvaro Touzon

unread,
Sep 22, 2011, 6:10:45 AM9/22/11
to symfo...@googlegroups.com
Hola,
en un proyecto de .Net, necesite validar un formato de Imagen, tipo ".gif", y ".jpg", mediante byteArray, existe algo similar en PHP, o Symfony?
gracias
Álvaro, Senior Web Developer

se bardo

unread,
Sep 22, 2011, 6:19:25 AM9/22/11
to symfo...@googlegroups.com
En symfony 2 uso  $form['campo']->getData()->guessExtension();

$extension = $form['campo']->getData()->guessExtension();
            if (!$extension) {
                // extension cannot be guessed
                $extension = 'bin';
            }


pero en symfony 1.x usuaria los tipos MIME si es imagen lo que queres comprobar

 'mime_types'=>array('aqui_tipo_mime_que_te_interesa_comprobar')

Alvaro Touzon

unread,
Sep 22, 2011, 6:27:52 AM9/22/11
to symfo...@googlegroups.com
Me referia, casi a lectura de byarray, si existe desde PHP. Gracias

se bardo

unread,
Sep 22, 2011, 6:35:10 AM9/22/11
to symfo...@googlegroups.com
Tal vez mb_convert_encoding() te sirva.

Saludos.

El 22 de septiembre de 2011 12:10, Alvaro Touzon <alvaro...@gmail.com> escribió:
Reply all
Reply to author
Forward
0 new messages