# Upload file -\> StringIO; perchÃ©?

**URL:** <https://www.ruby-forum.com/t/upload-file-stringio-percha/83987>\
**Category:** IT\
**Created:** [January 31, 2007, 10:53am UTC](https://www.ruby-forum.com/t/upload-file-stringio-percha/83987 "2007-01-31T10:53:49Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [January 31, 2007, 10:53am UTC](https://www.ruby-forum.com/t/upload-file-stringio-percha/83987/1 "2007-01-31T10:53:49Z")

</div>

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 ("").

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [January 31, 2007, 10:59am UTC](https://www.ruby-forum.com/t/upload-file-stringio-percha/83987/2 "2007-01-31T10:59:49Z")

</div>

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](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](mailto:removed_email_address@domain.invalid)
2. [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [January 31, 2007, 11:04am UTC](https://www.ruby-forum.com/t/upload-file-stringio-percha/83987/3 "2007-01-31T11:04:49Z")

</div>

On 1/31/07, david [removed\_email\_address@domain.invalid](mailto: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

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [January 31, 2007, 11:28am UTC](https://www.ruby-forum.com/t/upload-file-stringio-percha/83987/4 "2007-01-31T11:28:51Z")

</div>

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
