#! /usr/bin/perl -w use strict; use CGI::Carp 'fatalsToBrowser'; use CGI qw/:standard/; use lib '/path/to/lib'; my $query = new CGI; # Using 'filefield' option. THIS WORKS FINE!!! #my $dosfilename = $query->param('upfile') || "None"; # If I send the filename as 'hidden' field, then I can retrieve that in subsequent runs. The variable will have the path to DOS file as shown below:- # THIS DOESN'T WORK my $dosfilename = 'C:\\Documents and Settings\\user\\Desktop\\Testing\\file_name.txt'; print $query->header( ); print $query->start_html(); print $query->start_multipart_form( -name => 'data', -method => 'post'); print $query->p( $dosfilename ); if ($dosfilename ne 'None' ) { my $unixfilename = form_unix_filename($dosfilename); my ($ret_stat, $bytes_read) = uploadfiletounix($dosfilename, $unixfilename); print $query->p( $ret_stat ); print $query->p( $bytes_read ); } print $query->filefield( -name => 'upfile' ); print $query->br(); print $query->submit( -name => 'Submit' ); print $query->end_form(); print $query->end_html(); sub form_unix_filename { my $dosfilename = shift; my $unixfilename = substr $dosfilename, rindex( $dosfilename, '\\' ) + 1; # replace any 'white spaces' with '_' $unixfilename =~ s/\s/_/g; return $unixfilename; } sub uploadfiletounix{ my ( $dosfilename, $unixfilename ) = @_; print $query->p( $unixfilename ); my ( $buffer, $bytes, $read ); open ( OUTFILE, ">", $unixfilename ) || return "Failed"; #die("Unable to create upload file in the server: $!\n"); # set binary mode for the input file and the output file binmode $dosfilename; binmode OUTFILE; # Read the dos file and write to the unix file # while( $read = read( $dosfilename, $buffer, 16384 ) ) { # Write to o/p file print OUTFILE $buffer; # Keep track of the no of bytes read $bytes += $read; } # Close the o/p file close OUTFILE; # Return success return ( "Success", $bytes ); }