[Catalyst] size limit on file uploads

J. Shirley jshirley at gmail.com
Tue Jul 10 22:57:37 GMT 2007


On 7/10/07, Jim Spath <jspath at pangeamedia.com> wrote:
> J. Shirley wrote:
> > On 7/10/07, Jim Spath <jspath at pangeamedia.com> wrote:
> >> I would like to place a maximum file size limit on uploads, but am not
> >> quite sure how to go about this in Catalyst.
> >>
> >> I've done this in CGI scripts by reading in chunks of the file until I
> >> hit some size limit, but couldn't find anything in the Catalyst docs.
> >>
> >> Thanks!
> >> - Jim
> >>
> >
> > Hi Jim,
> >
> > A better approach would be to configure the webserver to do this, that
> > way you aren't tying up your application.
> >
> > As an example, if you use Apache simply do:
> > LimitRequestBody 1048576
> >
> > -Jay
>
> Jay,
>
> Using the webserver is a definite possibility, and something we should
> put in place anyways, to restrict large requests.
>
> One downside of using such an option for limiting of file uploads is
> that it restricts me from providing meaningful error messages to the
> user within my application.
>
> Another downside is that the limit would then be static across my
> application, preventing me from setting different limits depending on
> what the user is doing.
>
> - Jim
>

Hi Jim,

I didn't realize that was what you were after.  The upload object
($c->req->uploads->{name}) has a ->size method that returns the size
in bytes.  You can check that to determine the actual attachment size.

I don't believe (and some of the Engine guys can correct me if
necessary) there is any way to split off while the upload is actually
happening unless you override prepare_body_chunk.

That method is called while processing the HTTP body and working with
an HTTP::Body object.  I'm not sure how you could not do something
application wide, since this happens during prepare_body:

http://search.cpan.org/~jrockway/Catalyst-Manual-5.700701/lib/Catalyst/Manual/Internals.pod#Request_Lifecycle

So -- as you can see there, I'm not sure how your action would know
about the limits unless you wrote a plugin for this, that then was
configured on a per-action basis.  Something like PageCache, really.

Just wild speculation, but hope it helps.

Happy hacking,
-Jay

-- 
J. Shirley :: jshirley at gmail.com :: Killing two stones with one bird...
http://www.toeat.com



More information about the Catalyst mailing list