FileUpload without Tempfile

28 views
Skip to first unread message

Helmut Juskewycz

unread,
Apr 8, 2011, 7:38:36 AM4/8/11
to Ruby on Rails: Talk
I am looking for a way to upload a file to Rails 3 app, but without
generating a temp file. Googling the issue gave me some insight in how
the file upload works. As I understand Rails creates a temp file when
the file size is larger than 20kb. Is there a way to change this limit
and avoid the temp file generation?

Another solution I was looking in was creating a Rack App and so avoid
the file generation, however, didn't work either. Same with a Sinatra
app.

Btw. yes it is mandatory that the file is not saved and only kept in
memory for security reasons.

Thanks

Chris Mear

unread,
Apr 8, 2011, 8:00:21 AM4/8/11
to rubyonra...@googlegroups.com, Helmut Juskewycz
On 8 April 2011 12:38, Helmut Juskewycz <hjusk...@gmail.com> wrote:
> I am looking for a way to upload a file to Rails 3 app, but without
> generating a temp file. Googling the issue gave me some insight in how
> the file upload works. As I understand Rails creates a temp file when
> the file size is larger than 20kb. Is there a way to change this limit
> and avoid the temp file generation?
>
> Another solution I was looking in was creating a Rack App and so avoid
> the file generation, however, didn't work either. Same with a Sinatra
> app.

What you've discovered is that it's not really Rails or Sinatra that's
creating the Tempfile -- it's Rack:

https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L483

I think you'll need to dig down to that web server - app interface
level if you want to amend this.

Chris

Helmut Juskewycz

unread,
Apr 8, 2011, 8:13:32 AM4/8/11
to Ruby on Rails: Talk
Thanks for pointing out that it is in Rack. Brings me one step closer
to a solution.

On Apr 8, 2:00 pm, Chris Mear <chrism...@gmail.com> wrote:
I am not sure what you mean with 'to that web server'

>
> Chris

Frederick Cheung

unread,
Apr 8, 2011, 8:22:38 AM4/8/11
to Ruby on Rails: Talk


On Apr 8, 12:38 pm, Helmut Juskewycz <hjuskew...@gmail.com> wrote:

> Another solution I was looking in was creating a Rack App and so avoid
> the file generation, however, didn't work either. Same with a Sinatra
> app.
>
> Btw. yes it is mandatory that the file is not saved and only kept in
> memory for security reasons.

Is it enough for /tmp to be something like tmpfs (ie non persistent) ?

Fred
>
> Thanks

Chris Mear

unread,
Apr 8, 2011, 8:25:52 AM4/8/11
to rubyonra...@googlegroups.com

Sorry, badly worded. I meant that it's happening at the interface between the web server and your app; in this case that's where Rack lives.

Chris

Helmut Juskewycz

unread,
Apr 8, 2011, 11:25:04 AM4/8/11
to Ruby on Rails: Talk


On Apr 8, 2:22 pm, Frederick Cheung <frederick.che...@gmail.com>
wrote:
Thanks Fred for pointin to tmpfs, however, using tmpfs would also
allow that the file can be read by anyone with access

Helmut Juskewycz

unread,
Apr 8, 2011, 11:48:18 AM4/8/11
to Ruby on Rails: Talk
I tried to hack into Rack, however, so far I was not able to avoid
creating a tempfile.

On Apr 8, 2:25 pm, Chris Mear <chrism...@gmail.com> wrote:

Mike

unread,
May 9, 2011, 4:40:09 AM5/9/11
to Ruby on Rails: Talk
>
> Btw. yes it is mandatory that the file is not saved and only kept in
> memory for security reasons.

You could unlink the Tempfile right after creation, as mentioned here:
http://www.ruby-doc.org/stdlib/libdoc/tempfile/rdoc/classes/Tempfile.html

That will prevent any other process to get hands on that file.

Mike
Reply all
Reply to author
Forward
0 new messages