#!/usr/bin/perl -Tw # upload4.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_Names = param('file_name'); my @Descriptions = param('file_desc'); my @File_Array = (); $CGI::POST_MAX = 1024 * 1500; # Limit to 1500kb posts... Get_Names(); Store_Descriptions(); Print_Results(); sub Get_Names{ my $counter = 0; my $full_name; my $file_name; foreach $full_name (@File_Names){ my $rec = {}; if($full_name ne ""){ $file_name = Get_File_Name($full_name); $rec->{file_name} = $file_name; $rec->{full_name} = $full_name; $rec->{description} = $Descriptions[$counter]; push @File_Array, $rec; Store_File($full_name, $file_name); } $counter++; } } sub Store_Descriptions{ my $temp; 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; foreach $temp (@File_Array){ $sth_insert->execute( $temp->{description}, $temp->{file_name} ); } $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; return($full_name); } sub Store_File{ my $file_handle = shift; my $file_name = shift; my $data; my $mime = uploadInfo($file_handle)->{'Content-Type'}; open (STORAGE, ">$Directory/$file_name") or die "Error: $!\n"; if( $mime !~ /text/ ){ binmode ($file_handle); binmode (STORAGE); } while( read($file_handle, $data, 1024) ){ print STORAGE $data; } close (STORAGE); } sub Print_Results{ my $temp; print header; print start_html("File Upload Example 4"); print h2("The following files were uploaded:"); foreach $temp (@File_Array){ my $link = "$Url_Path/$temp->{file_name}"; print< File Name: $temp->{file_name} Description: $temp->{description} Link to File: $link

HTML } print qq(\nView Files); print end_html; }