Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

It can be tricky to see the right information when it is all new to you... It actually does explain where $filename comes from on that page, and in the CGI.pm perldocs.

$filename = $query->param('uploaded_file');

Where 'uploaded_file' is the name of the form parameter that you put in your HTML file. Right around the same place where the above code appears, it also says the following:

The filename returned is also a file handle. You can read the contents of the file using standard Perl file reading calls:

What this means is that the $filename that is returned in the above code actually contains 2 different things. When you look at $filename as a scalar, you will get a string containing the name of the file that was uploaded. However, if you try to use the $filename as a file handle, then you can read from it and get the contents of the file. There is some perl 'magic' going on here that you should not worry about right now, but should look into later when you are more familiar with Perl (You can read the perldata manpage and search for the section on TypeGlobs and Filehandles for more info on what is happening here).

So, to get back to your question, to get a file upload to work, you need to do something like the following:

# Get the name of the file and an # open file handle to the file contents $filename = $query->param('uploaded_file'); # Read a text file and print it out while ($line = <$filename>) { print $line; }

Or if the uploaded file is a binary file like an GIF or JPEG:

# Get the name of the file and an # open file handle to the file contents $filename = $query->param('uploaded_file'); # Copy a binary file to somewhere safe open (OUTFILE,">>/usr/local/web/users/feedback"); while ($bytesread=read($filename,$buffer,1024)) { print OUTFILE $buffer; } close $filename;

The way the file upload actually works is that the web server receives the file and stores it in a temporary place. The CGI.pm module opens up this file for reading and gives you the open filehandle. You have to use this filehandle to read the contents of the file, and then do something with it. Usually this just means creating a new file and writing the contents to it.

Again, this is straight out of the documentation, but I am just trying to point you in the right direction. Feel free to ask more question if you get stuck, but the best way to learn is just to try a bunch of things and see what happens.

Good Luck

Update: I forgot about the 'upload' method that chromatic mentions above, so definately look at that as well.


In reply to Re: Re: Re: CGI Uploading (repost) by cees
in thread CGI Uploading (repost) by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (5)
As of 2024-04-24 07:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found