LWP - multipart/form-data file upload from scalar rather than local file

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I'm looking to do an HTTP upload, preferably with HTTP::Request::Common,
but get the file data from either a filehandle or a scalar rather than
give it a local filename.

For some background, I'm making a psuedo-proxy for an HTTP file upload.  
The user uploads an image from their browser to a mod_perl server.   The
server then changes around some of the arguments, namely taking a session
ID out of the post data and adding it to the query string, then sends that
modified request off to the final destination server.

I can get to the Apache upload object via $r->upload('Image'), then get a
filehandle from $upload->fh();   At that point, I want to either pass that
filehandle or read from that filehandle into a scalar, then pass that to
LWP for an upload.

There's a bit in the perldoc for HTTP::Request::Common, in the POST
section, that says "The first value in the array ($file) is the name of a
file to open. This file will be read and its content placed in the
request.   The routine will croak if the file can't be opened.   Use an
'undef' as $file value if you want to specify the content directly."
However, that's the last mention at all of using undef for $file, I can't
seem to find any more information on this.   According to the doc, the
array should be [ $file, $filename, Header => Value... ].   Assuming that
the file contents would be somewhere in that Header => Value section, I
have no idea what Header to give it.

Is there a way to pass a scalar or a filehandle to LWP for an upload, or
do I have to give it a local filename to read from?   I'd prefer not to
write temporary files for this if I can help it, but I can do that if
there's no other way around this.

Also, let me know if I'm barking up the wrong tree with the way to
accomplish this goal.   All I'm really trying to do is take one of the
name/value pairs out of the POST content and attach it to the URL as part
of a query string, so it's entirely possible there's a far better way to
do this.


-- Swervo

Remove S, P, A, and M from address to email me.

Re: LWP - multipart/form-data file upload from scalar rather than local file

On Wed, 28 Sep 2005 12:33:15 -0700, Swervo wrote:

Quoted text here. Click to load it

I know it's bad form to respond to oneself, but figured I'd mention that
it appears the only way to accomplish this is modify
HTTP::Request::Common, or in my case, create my own module with most of
the same code, but accept a filehandle as the first argument rather than
the name of a local file.   Works like a charm.

-- Swervo

Remove S, P, A, and M from address to email me.

Site Timeline