Forum: Ruby on Rails Getting file size on upload

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Paul B. (Guest)
on 2009-04-17 17:45
I get the file size of images by

imgmb = File.size("#{RAILS_ROOT}/..../#{file}")

But that's when I have the file on the server. Can you test that before
in order to stop the file upload if it's really heavy? How does that
work?
Frederick C. (Guest)
on 2009-04-17 18:15
(Received via mailing list)
On 17 Apr 2009, at 14:45, Pål Bergström wrote:

>
> I get the file size of images by
>
> imgmb = File.size("#{RAILS_ROOT}/..../#{file}")
>
> But that's when I have the file on the server. Can you test that
> before
> in order to stop the file upload if it's really heavy? How does that
> work?

It has to be done upstream of rails (apache has a file upload limit
for example).

Fred
Paul B. (Guest)
on 2009-04-17 18:20
Frederick C. wrote:
> On 17 Apr 2009, at 14:45, P�l Bergstr�m wrote:
>
>>
>> I get the file size of images by
>>
>> imgmb = File.size("#{RAILS_ROOT}/..../#{file}")
>>
>> But that's when I have the file on the server. Can you test that
>> before
>> in order to stop the file upload if it's really heavy? How does that
>> work?
>
> It has to be done upstream of rails (apache has a file upload limit
> for example).
>
> Fred

Sorry for a stupid question, but do you mean when it has arrived to the
server?
Rick (Guest)
on 2009-04-17 23:17
(Received via mailing list)
How are the files loaded onto the server?

For example, if they are coming in from users as email attachments you
could use attachment_fu to set the maximum size in the model:

class Photo < ActiveRecord::Base
  has_attachment :storage => :file_system,
    .
    .
    :size => 1..5.megabytes
  validates_as_attachment
end

(paperclip probably has similar functionality but I have not personal
experience with it)



On Apr 17, 3:45 am, Pål Bergström <removed_email_address@domain.invalid>
Rick (Guest)
on 2009-04-17 23:20
(Received via mailing list)
Just for clarification, this will not prevent the file being uploaded
into the server's memory but it will prevent it from being saved to
the file system.
Brendon W. (Guest)
on 2009-04-18 06:25
(Received via mailing list)
Just to clarify further.  If the file is large enough, it WON'T be
kept in memory, instead it will be written to a temp file and the
handle for that will be passed in the params.  I don't know of any way
inside Rails to stop a file being uploaded, but suspect you could get
the web server to limit how much it would upload for a single request.

Brendon.
Paul B. (Guest)
on 2009-04-18 10:34
Brendon Whateley wrote:
> Just to clarify further.  If the file is large enough, it WON'T be
> kept in memory, instead it will be written to a temp file and the
> handle for that will be passed in the params.  I don't know of any way
> inside Rails to stop a file being uploaded, but suspect you could get
> the web server to limit how much it would upload for a single request.
>
> Brendon.

Good to know. I use Litespeed. I'll check the server settings.

What I don't understand is how this actually works, so just a quick
follow-up question – that I guess is more related to the basics of file
handling in Ruby.

I see that it comes into the server as a ruby object. Isn't that a
temp-file? I thought that it always was a temp-file. Can I use
File.size(file) on that or do I have to File.open() first?
This topic is locked and can not be replied to.