I've been having problems getting uploads to work using libapreq2-2.03_04-dev.
I finally have it working, but I thought I would post my story for the benefit
of others.

Originally I was doing the upload like this:

        my $bb = $r->upload('file')->bb();
        open(OUT,">/tmp/test_file");
        while (1) {
                my $b = $bb->first;
                last unless $b;
                $b->remove;
                my $data;
                $b->read($data);
                print OUT $data;
        }
        close OUT;

Small files were working ok, but large files where being truncated at about 270k
(which is suspiciously close to the 256k "zero copy limit" I saw mentioned on
[EMAIL PROTECTED]).

To make a long story short, here is the version that works:

        my $bb = $r->upload('file')->bb();
        open(OUT,">/tmp/test_file");
        while (1) {
                my $b = $bb->first;
                last unless $b;
                my $data;
                $b->read($data);
                print OUT $data;
                $b->remove;      # <--- ta da!
        }
        close OUT;

Notice that the only thing which changed was the position of the $b->remove
call.  Call it too soon and your upload is unreliable.

Request for libapreq2 developers: Could you please either remove or document
this gotcha?

I also got upload->link to work, but I would have more confidence in that method
(Request #2) if the default value of TEMP_DIR was documented.  Mason does not
currently provide a way to pass a TEMP_DIR to Apache::Request->new.

~ John Williams



-- 
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html

Reply via email to