| praveen.batchu@gmail.com 2006-01-19, 6:55 pm |
| This is my code to upload files to a directory called mails in ftp
server from my local files systems mails directory as shown in the code
below.
But it is not working correctly
not creating directory
not uploading files.
help any one .......
i already posted messages abt this issue.......
#!C:\perl\bin\perl -w
$ftp_server = "ftp.name.com";
$ftp_dir = "/mails"; # no backslash at the end!
$ftp_uid = "username";
$ftp_pw = "password";
@src_dir = ("c:\\Documents and Settings\\admin\\My Documents\\My
Website\\cgi\\mails");
use File::Copy;
use File::stat;
use File::Find;
use Net::FTP;
$total_files = 0;
$processed_files = 0;
$skipped_files = 0;
$ftp = Net::FTP->new($ftp_server) or die "unable to connect: $@\n";
$ftp->login($ftp_uid, $ftp_pw) or die "unable to login: $@\n";
$ftp->binary;
$ftp->mkdir("mails") or die "unable to create directory: ".$@."\n";
find(\&processFiles, @src_dir);
$ftp->quit() or warn "unable to quit: $@\n";
sub processFiles {
my $srcdir = fsToBs($File::Find::dir);
my $srcpath = fsToBs($File::Find::name);
my $base = fsToBs($File::Find::topdir);
# print STDERR "source dir is $srcdir\n";
# print STDERR "source path is $srcpath\n";
# print STDERR "base is $base\n";
# no DIRECT processing of directories.
if ( -d $srcpath ) {
return;
}
my $dstdir = $srcdir;
my $dstpath = $srcpath;
$dstdir =~ s{\Q$base\E}{$ftp_dir}is;
$dstpath =~ s{\Q$base\E}{$ftp_dir}is;
$dstdir = bsToFs($dstdir);
$dstpath = bsToFs($dstpath);
# print STDERR "dest dir is $dstdir\n";
# print STDERR "dest path is $dstpath\n";
# print STDERR "source path is $srcpath\n";
processFile($srcpath,$dstpath,$dstdir);
}
sub processFile {
my ($src,$dst,$dstdir) = @_;
$total_files++;
# --------------------
# check time.
my $need_upload = 0;
# create time.
my $t1 = $lookup{$src};
my $t2 = timeString(stat($src)->mtime);
if ( not defined $t1 ) {
$lookup{$src} = $t2;
$need_upload = 1;
} else {
my $delta_sec = calcDeltaSeconds($t1,$t2);
$need_upload = 1 if $delta_sec>5; # 5 seconds as tolerance.
}
# --------------------
if ( $need_upload>0 ) {
$processed_files++;
$ftp->mkdir($dstdir,1);
# print STDERR "#########dest path is $dst\n";
# print STDERR "######source path is $src\n";
$ftp->put($src, $dst) or die "unable to upload file\n";
} else {
$skipped_files++;
}
}
sub bsToFs {
my ($s) = @_;
$s =~ s/\\/\//gis;
return $s;
}
sub fsToBs {
my ($s) = @_;
$s =~ s/\//\\/gis;
return $s;
}
sub timeString {
my ($tm) = @_;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,
$yday,$isdst) =
localtime($tm);
return sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1,
$mday, $hour, $min, $sec);
}
# input dates as string "YYYY-MM-DD HH:MM:SS".
# earlier as first parameter, later as second.
sub calcDeltaSeconds {
my ($t1,$t2) = @_;
my ($year1,$month1,$day1,$hh1,$mm1,$ss1) = scanDate($t1);
my ($year2,$month2,$day2,$hh2,$mm2,$ss2) = scanDate($t2);
my ($days, $hours, $minutes, $seconds) = Delta_DHMS(
$year1, $month1, $day1, $hh1, $mm1, $ss1, # earlier.
$year2, $month2, $day2, $hh2, $mm2, $ss2); # later.
return $seconds + $minutes*60 + $hours*60*60 + $days*60*60*24.
}
sub scanDate {
my ($date) = @_;
my ($year, $month, $day, $hour, $minute, $seconds);
$year = substr($date, 0, 4);
$month = substr($date, 5, 2);
$day = substr($date, 8, 2);
$hour = substr($date, 11, 2);
$minute = substr($date, 14, 2);
$seconds = substr($date, 17, 2);
return ($year, $month, $day, $hour, $minute, $seconds);
}
|