Okay, that didn't fix the problem, but I have figured it out.  

Apache::Upload returns the filehandle as being blessed into Apache::Upload.  Whenever 
I send the filehandle to Image::Magick it thinks that it is a url of type Apache: 
(kind of like file: or http:).  If I bless the filehandle into a class that does not 
have a colon in it, it works.  

Here is my work around:

....8<... *snip*

my $fh = $r->upload->fh;
bless $fh, "nonexistantclass";
my $error = $image->Read(file=>$fh);

....8<... *snip*


I guess that this is a bug in Apache::Upload and Image::Magick.  Apache::Upload should 
not return the filehandle as blessed (I'm confused why it does this in the first 
place) and Image::Magick should do a better job checking to see if it has been sent a 
filehandle.  

Can this please be fixed in the next release of libapreq?

Thanks,
Jay Buffington 


On Thu, Jul 12, 2001 at 10:03:24AM -0400, darren chamberlain wrote:
> Jay Buffington <[EMAIL PROTECTED]> said something to this effect on 07/11/2001:
> > I'm trying to use image magick to manipulate images that are
> > uploaded via http.  To handle the uploaded images I'm using
> > libapreq's Apache::Upload.
> > 
> > I wrote the below simple example script to help explain my problem.
> > 
> > When an image is uploaded to it I get this error in the apache
> > error log: ImageMagick error: Warning 320: no delegate for this
> > image format (:Upload=GLOB(0x873bcec)) [No such file or
> > directory]
> > 
> > I'm confused why this happens.  Could someone please explain
> > this behaviour to me? 
> 
> This looks like $r->upload->fh is being stringified, probably
> because of the context.  What happens when you assign the glob
> returned by $r->upload->fh to a lexical scalar, and then pass
> that into $image->Read()?  I hit this a few days ago, when
> passing a glob reference into a subroutine (not
> mod_perl-related), and this is the only thing that worked.
> 
> > 
> > package UploadFile;
> > 
> > use Apache;
> > use Apache::Request;
> > use Apache::Constants qw(:common);
> > use CGI qw(-compile :standard);
> > use Image::Magick;
> > 
> > sub handler {
> >     my $r = new Apache::Request(shift);
> > 
> >     if ($r->param('action') eq "upload") {
> >         my $image = new Image::Magick;
> 
> Add these changes: 
> 
>           my $fh = $r->upload->fh;
>           my $error = $image->Read(file => $fh);
> 
> >         $r->log_error("ImageMagick error: $error") if $error;
> >         $r->print("image geometry: " . join " x ",
> >           $image->Get('width', 'height'));
> >         undef $image;
> >     }
> > 
> >     $r->print(start_html() . start_multipart_form() . "Upload an image: " .
> >           filefield(-name=>"uploadedfile") . submit(-name=>"action",
> >           -value=>"upload") . end_form() . end_html());
> > 
> >     return OK;
> > }
> > 
> > 1;
> 
> (darren)
> 
> -- 
> Death to all fanatics!

Reply via email to