I owe this list, and Mumia in particular, an apology. Apparently, my
script was working yesterday when I was asking for help. I'm guessing
that at some point, I made a change to the HTML input form and forgot to
refresh the copy in my browser. For the rest of yesterday, it continued
to appear to malfunction. However, today, after starting my system
fresh, it just began to work. I apologize for wasting folk's time and
energy.

Mumia, thank you especially for your patience and effort on my behalf.
In addition, you've shown me a way to pipe the file into the email
directly without writing to a file, which is very helpful.

-Kevin

-----Original Message-----
From: Mumia W. [mailto:[EMAIL PROTECTED] 
Sent: Friday, February 23, 2007 12:53 PM
To: Beginners List
Subject: Re: File uploading using CGI

On 02/23/2007 09:06 AM, Zembower, Kevin wrote:
> Mumia, I don't think the problem is in sending the file out. When the 
> file is recorded on /tmp/, its size is zero. The files I'm uploading
are 
> at least 1KB. Something's wrong with reading the file from the
uploaded 
> filehandle, I believe. Your example takes for granted a properly
written 
> file on disk, and doesn't include reading an uploaded file from a 
> filehandle. I have other scripts that send out files as attachments 
> using MIME::Lite, so I'm somewhat confident in this part of my script.
> 
> Thanks, though, for taking the time and effort to try to help me with
my 
> problems.
> 
> -Kevin
> 

Yeah, I should've read your message more closely, sorry.

>   open(TMP_FILE, ">$tmp_file_name") or die "Can't open temp upload
file
> $tmp_file_name\n";
>    my $fh = $query->upload('Material_File');
>    while (<$fh>) {
>       print TMP_FILE;
>    } # while there's more file to upload and store
>    close(TMP_FILE);
> 

You've already mentioned that you're on a UNIX system, so setting 
binmode to raw shouldn't matter, but I suggest covering all the bases 
anyway:

open (TMP_FILE, ">:raw", $tmp_file_name) or die "Can't open temp upload
file $tmp_file_name: $!";
print TMP_FILE <$fh>;
close(TMP_FILE);

However, I don't see a reason to save the data to a file at all. Why not

just slurp the data directly from the file handle? Here is an example 
that doesn't send the mail:


use strict;
use warnings;
use CGI::Pretty qw(-no_xhtml :standard);


url_param('posted') ? process() : request() ;

sub request {
     print header(
         -type => 'text/html',
         '-cache-control', 'no-cache',
         );

     print start_html('Upload File'),
         h1('Upload File'),
         p('Use this page to test uploading a file.') ;

     print start_form('POST',
             url(-relative => 1) . '?posted=1',
             'multipart/form-data'),
         p('Enter the path to your file to upload here:'),
         p(filefield('test-upload','',10,4000)),
         submit,

         end_form;


     print end_html;
}

sub process {
     require MIME::Lite;

     print header(
         -type => 'text/plain',
         '-cache-control', 'no-cache',
         );

     my $fh = param('test-upload');
     return unless $fh;

     my $mime = MIME::Lite->new(
         From => '[EMAIL PROTECTED]',
         To => '[EMAIL PROTECTED]',
         Subject => 'Test of File Upload',
         Type => 'text/plain',
         Data => do { local $/; <$fh> },
         );

     print "\n";
     print $mime->as_string;

}


__HTH__




-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to