Upload file -> StringIO; perché?


#1

ciao,
Rails. Form con campo type=“file”. Submit.
params.inspect:
{
“commit”=>“Salva”,
“channel_id”=>“1”,
“media”=>
{
“filename”=>“fds”,
“data”=>#StringIO:0x35576d0},
“action”=>“create”,
“container_id”=>“3”,
“controller”=>“medias”
}
}

“data” è un StringIO, ma perché? Mi aspettavo un File. I doc sono un
po’ vaghi e non mi è chiaro se il fatto di essere un StringIO
significa che ho già i dati del file in RAM. Secondo i libri e doc
StringIO serve per trattare un String come fosse un File e che si
usa,
ad esempio, nei test per fingere un oggetto File. Nel mio caso voglio
mettere i dati in un Blob nel DB e se ho già i dati in RAM sarebbe
inutile fare un read/sysread (qual è meglio? qual è più veloce? la
seconda dire…), giusto?
La cosa bizzarra è che non ho “local_path”, e cioè esiste come
metodo,
ma è blank ("").


#2

Hmm. Mi correggo: se carico un file di testo ottengo un StringIO ma se
carico un binario è un File. Hmm. Perché Rails cerca di fare il furbo
con me? Significa che se l’utente carica un file di testo ho tutto in
RAM, mentre se carica un binario devo leggere i dati dal disco?
Brutto… O è una questione di dimensione? E quale sarebbe il limite?
Ecchepalle…
david wrote:

ciao,
Rails. Form con campo type=“file”. Submit.
params.inspect:
{
“commit”=>“Salva”,
“channel_id”=>“1”,
“media”=>
{
“filename”=>“fds”,
“data”=>#StringIO:0x35576d0},
“action”=>“create”,
“container_id”=>“3”,
“controller”=>“medias”
}
}

“data” è un StringIO, ma perché? Mi aspettavo un File. I doc sono un
po’ vaghi e non mi è chiaro se il fatto di essere un StringIO
significa che ho già i dati del file in RAM. Secondo i libri e doc
StringIO serve per trattare un String come fosse un File e che si
usa,
ad esempio, nei test per fingere un oggetto File. Nel mio caso voglio
mettere i dati in un Blob nel DB e se ho già i dati in RAM sarebbe
inutile fare un read/sysread (qual è meglio? qual è più veloce? la
seconda dire…), giusto?
La cosa bizzarra è che non ho “local_path”, e cioè esiste come
metodo,
ma è blank ("").

_______________________________________________________________________

Ml mailing list
[1]removed_email_address@domain.invalid
[2]http://lists.ruby-it.org/mailman/listinfo/ml


“Ce qui compte, ce n’est pas le bonheur de tout le monde, c’est le
bonheur de c
hacun.” - Boris Vian

References

  1. mailto:removed_email_address@domain.invalid
  2. http://lists.ruby-it.org/mailman/listinfo/ml

#3

On 1/31/07, david removed_email_address@domain.invalid wrote:

Hmm. Mi correggo: se carico un file di testo ottengo un StringIO ma se
carico un binario è un File. Hmm. Perché Rails cerca di fare il furbo
con me? Significa che se l’utente carica un file di testo ho tutto in
RAM, mentre se carica un binario devo leggere i dati dal disco?
Brutto… O è una questione di dimensione? E quale sarebbe il limite?
Ecchepalle…

Io mi sono trovato bene con il plugin “file_column”. Ti permette di
decidere che una certa “colonna” del tuo modello è un file, e per il
resto se lo gestisce lui. Sono anche riuscito a fare dei functional
test.

M


#4

On mer, 2007-01-31 at 10:58 +0100, david wrote:

Hmm. Mi correggo: se carico un file di testo ottengo un StringIO ma se
carico un binario è un File. Hmm. Perché Rails cerca di fare il furbo
con me? Significa che se l’utente carica un file di testo ho tutto in
RAM, mentre se carica un binario devo leggere i dati dal disco?
Brutto… O è una questione di dimensione? E quale sarebbe il limite?
Ecchepalle…

Dipende dalle dimensioni, file piu’ piccoli di 16k (mi pare fosse questa
la dimensione) sono StringIO ,piu’ grandi sono File.
Sono StringIO anche se lasci il campo file della form vuoto

Ciao