#!/usr/bin/perl -Tw
# upload3.cgi
use strict;
use DBI;
use File::Basename;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
my $Directory = "/usr/www/html/book/storage";
my $Url_Path = "/book/storage";
my $File_Name = param('filename');
my $Description = param('description');
my $File = Get_File_Name($File_Name);
$CGI::POST_MAX = 1024 * 250; # Limit to 250kb posts...
Store_Results();
Store_Description();
Print_Results();
sub Store_Description{
my $DBH = DBI->connect("DBI:mysql:book","book","addison");
my $sth_insert =
$DBH->prepare( qq{INSERT INTO files (Description,FileName) VALUES (?,?)} )
or die $DBH->errstr;
$sth_insert->execute($Description, $File);
$DBH->disconnect;
}
sub Get_File_Name{
if($ENV{HTTP_USER_AGENT} =~ /win/i){
fileparse_set_fstype("MSDOS");
}
elsif($ENV{HTTP_USER_AGENT} =~ /mac/i) {
fileparse_set_fstype("MacOS");
}
my $full_name = shift;
$full_name = basename($full_name);
$full_name =~ s!\s!\_!g; # Replace whitespace with _
return($full_name);
}
sub Store_Results{
my $data;
my $mime = uploadInfo($File_Name)->{'Content-Type'};
open (STORAGE, ">$Directory/$File")
or die "Error: $Directory/$File: $!\n";
if($mime !~ /text/){
binmode ($File_Name);
binmode (STORAGE);
}
while( read($File_Name, $data, 1024) ){
print STORAGE $data;
}
close STORAGE;
}
sub Print_Results{
my $link = "$Url_Path/$File";
print header;
print start_html("File Upload Example 3");
print<
File Sent: $File_Name
File Name: $File
Link to File: $link
View Files
HTML
print end_html;
}