Getting file size on upload


#1

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?


#2

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


#3

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?


#4

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.


#5

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


#6

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?


#7

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.