Duda comparando strings

Hola,

Quizás sea algo muy tonto, pero no consigo sacarlo de ninguna forma.
Desde un formulario envio un archivo, y el controlador, antes de hacer
nada, compruebo el tipo del archivo,ya que necesito que sea excel.

Cuando hago:

params[“upload”][:datafile].content_type == “application/vnd.ms-excel”

Me devuelve false, aunque el fichero que este enviando realmente sea un
archivo excel. Así mismo, si hago debug, me encuentro que
params["uplo… tiene el valor “application/vnd.ms-excel”, por lo que no
entiendo porque no devuelve true.

He de usar otro operador? Alguien se ha encontrado con algo parecido?

Muchas gracias,

Hola Antonio,

Antonio R. escribió:

params[“upload”][:datafile].content_type == “application/vnd.ms-excel”

A qué clase pertenece ese content_type? si no es un string yo probaría a
convertirlo antes de hacer la comparación:

params[…].content_type.to_s == “application/vnd.ms-excel”


Raul M. - Freelance Web D.
http://raul.murciano.net

Hola Raul,

Pensaba en eso, pero content_type es de la clase String, asi que no debe
de ser esto.

Merci

El mié, 21-11-2007 a las 19:41 +0100, Raul M. escribió:

Has hecho un logger.debug del content-type?

Yo he tenido que discernir documentos por la extension del archivo
subido porque ponian el content-type generico.

Echale un ojo :slight_smile:

El 21/11/07, Antonio R. [email protected] escribió:

Antonio R. escribió:
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ernesto Jiménez Caballero
Software Engineer Leader
Negonation
(34) 620 475 382
[email protected]

Al hacer el logger.debug del content-type me saca lo mismo:
application/vnd.ms-excel

Asi que por ahora me tendŕe que apañar con la solución de Damian y no
seré tan estricto.

Muchas gracias a todos :smiley:

El mié, 21-11-2007 a las 22:15 +0200, Ernesto Jiménez Caballero
escribió:

On Nov 21, 2007 3:47 PM, Antonio R. [email protected] wrote:

Hola Raul,

Pensaba en eso, pero content_type es de la clase String, asi que no debe
de ser esto.

Quizás hay algún \n dando vueltas…

De todos modos, quizás mejor una comparación más flexible:

content_type =~ /ms-excel/

¿y si muestras la longitud de ambas cadenas? por que igual te está
saliendo el salto de linea que te han comentado y no se está viendo(o
igual tienen distinta codificación y por lo tanto tendrán una longitud
diferente…)

saludos

Antonio R. escribió:

escribió:

Antonio R. escribió:

params[“upload”][:datafile].content_type == “application/vnd.ms-excel”

A qué clase pertenece ese content_type? si no es un string yo probaría a
convertirlo antes de hacer la comparación:

params[…].content_type.to_s == “application/vnd.ms-excel”


/**

Prueba con …

content_type.include? “ms-excel”

Un saludo,

Francesc

On Nov 21, 2007, at 10:06 PM, Antonio R. wrote:

El mié, 21-11-2007 a las 22:15 +0200, Ernesto Jiménez Caballero

Hola Raul,

Antonio R. escribió:


http://lists.simplelogica.net/mailman/listinfo/ror-es

name. Francesc E. i Martí
voice. +34 678.681.603

Antonio R. escribió:

Al hacer el logger.debug del content-type me saca lo mismo:
application/vnd.ms-excel

Asi que por ahora me tendŕe que apañar con la solución de Damian y no
seré tan estricto.

Jajajaja, nos tienes a todos intrigados con este tema! xD


Raul M. - Freelance Web D.
http://raul.murciano.net

Al final si que habia un salto de linea perdido, lo he podido sacar con
los consejos que me dabais, mostrando la longitud de las cadenas y
poniendo el logger.debug entre comillas. Ahora, le he quitado este salto
de linea haciendo simplemente cadena.scan(/(\S)/) no se si será correcta
esta expresión, y ahora tengo las dos cadenas con 24 caracteres, pero
aun asi, al hacer la comparacion,sigue dandome false.

Resumimos, tengo esto:

prueba = params[“upload”][:datafile].content_type.scan(/(\S)/) ==
“application/vnd.ms-excel”

logger.debug("’#{prueba}’")
logger.debug("’#{params[“upload”][:datafile].content_type.scan(/(\S)/)}’")

y me devuelve:

‘false’
‘application/vnd.ms-excel’

El mié, 21-11-2007 a las 23:35 +0100, Borja Martín escribió:

On Nov 21, 2007, at 10:06 PM, Antonio R. wrote:

Al hacer el logger.debug del content-type me saca lo mismo:
application/vnd.ms-excel

Has probado a poner comillas alrededor?

logger.debug("’#{…}’")

a veces ayuda a ver algo raro que se escapa.

– fxn

prueba con params[“upload”][:datafile].content_type.trim ==
“application/vnd.ms-excel”

saludos

Antonio R. escribió:

“application/vnd.ms-excel”
El mié, 21-11-2007 a las 23:35 +0100, Borja Martín escribió:

escribió:

El 21/11/07, Antonio R. [email protected] escribió:

convertirlo antes de hacer la comparación:
http://lists.simplelogica.net/mailman/listinfo/ror-es


/**

No me ha funcionado con trim, pero a partir de ahí he podido encontrar
chomp, y con este método si funciona.

Muchas gracias a todos, y la verdad es que de una pequeña tonteria
parece que he aprendido bastante, jejeje.

Saludos :wink:

El jue, 22-11-2007 a las 00:41 +0100, Borja Martín escribió:

On Nov 21, 2007 7:53 PM, Antonio R. [email protected] wrote:

No me ha funcionado con trim, pero a partir de ahí he podido encontrar
chomp, y con este método si funciona.

Muchas gracias a todos, y la verdad es que de una pequeña tonteria
parece que he aprendido bastante, jejeje.

El “trim” es String#strip.

Igual creo que es mejor comparar con la expresión regular o con el
#include? como te dice Francesc…

Porque es mejor comparar con la expresión regular que usar strip?

El mié, 21-11-2007 a las 20:01 -0300, Damian J. escribió:

On Nov 21, 2007 8:13 PM, Antonio R. [email protected] wrote:

Porque es mejor comparar con la expresión regular que usar strip?

Sobre todo porque estás trabajando sobre el String y devolviendo una
nueva instancia, sólo para compararla. En ese sentido, usa la
expresión regular o el include? es mucho más semántico y expresa lo
que realmente querés hacer: ver si un String incluye a otro.


Ror-es mailing list
[email protected]

On Nov 21, 2007, at 11:27 PM, Raul M. wrote:

Antonio R. escribió:

Al hacer el logger.debug del content-type me saca lo mismo:
application/vnd.ms-excel

Asi que por ahora me tendŕe que apañar con la solución de Damian
y no
seré tan estricto.

Jajajaja, nos tienes a todos intrigados con este tema! xD

Fijate que yo tengo el avion antes de la 8 y mira por donde ando :slight_smile:

Es interesante, si lo ha resuelto con un chomp es que habia un salto
de linea en el content-type! Eso es muy raro la verdad, me gustaria
entender de donde viene. Lo acarreara de la cabecera HTTP? Seria un
bug en ese caso, estara mal enviado? … Hmrghrf…

– fxn

Bueno,

Seguimos con la intriga, engancho las cabeceras, que es lo que hay
debajo del content-type???

Saludos,

Content-Type: multipart/form-data;
boundary=---------------------------1397191609311848634219873264
Content-Length: 97126
-----------------------------1397191609311848634219873264
Content-Disposition: form-data; name=“upload[datafile]”;
filename=“prueba.xls”
Content-Type: application/vnd.ms-excel
ÐÏà ¡±á

El jue, 22-11-2007 a las 09:17 +0100, Pablo Formoso E. escribió: