Allora,
se stavi chiedendo come fare l'upload di un file, da una pagina HTML con form, al server usando Perl,
dai un occhiata a questo codice:
codice:
#!/usr/bin/perl
#
# upload.cgi
use strict;
use warnings;
use CGI::Carp "fatalsToBrowser";
use CGI;
my $q = new CGI();
my $file = $q->param('UPLOAD') || die "You didn't select a file!!\n$!";
my ($name) = ($file =~ m|([^\\/]+)$|);
my $upload_path = '/upload/' . $name;
open(LOCAL,">$upload_path") || die "Error: $upload_path\n$!";
binmode(LOCAL);
while(<$file>) {
print LOCAL $_;
}
close(LOCAL);
chmod (0644,"$upload_path");
print "Content-type: text/html\n\n";
print "Upload del file: $name eseguito con successo!\n";
naturalmente questa sarà la pagina html che richiamerà lo script:
codice:
...
<body>
<h2>Upload files:</h2>
<form ENCTYPE="multipart/form-data" ACTION="upload.cgi" METHOD="POST">
Please select a file to upload:
<input type="file" NAME="UPLOAD">
<input type="submit" value=" submit file ">
</form>
</body>
...
altrimenti se stavi chiedendo come fare per fare l'upload di un file da Perl (client) verso uno script che riceve l'upload (server) (magari uno script Perl!?), beh, è un pochino più difficile.
devi prima di tutto ricostruire una richiesta POST col protocollo HTTP, poi usare un modo per comunicare con il server ricevente, i Socket.
Questo è un codice abbozzato, vedi un pò se funziona (eseguilo dal prompt/shell)
codice:
#!/perl
use strict;
use warnings;
use Socket qw(:DEFAULT :crlf);
use IO::Socket::INET;
my $content;
my $file = "file.zip"; # Il tuo file da *uploaudare*
my $size = (-s $file);
my $target = 'http://www.yoursite.it/cgi-bin/upload.cgi'
my $socket = IO::Socket::INET->new(
PeerAddr => 'http://www.yoursite.it/',
PeerPort => '80',
Proto => 'tcp',
Type => SOCK_STREAM ) or die "Couldn't connect! $!\n";
syswrite $socket, "POST $target HTTP/1.0".$CRLF;
syswrite $socket, "Accept: */*".$CRLF;
syswrite $socket, "Accept-Language: en".$CRLF;
syswrite $socket, "Connection: Keep-Alive".$CRLF;
syswrite $socket, "User-Agent: Mozilla/4.0".$CRLF;
# syswrite $socket, "Content-type: application/octet-stream".$CRLF;
syswrite $socket, "Content-length: $size".$CRLF;
syswrite $socket, "$CRLF";
open(READ, "<$file") || die "$!\n";
binmode(READ);
while( read(READ,$content,4096) )
{ syswrite $socket, $content; }
close(READ);
print <$socket>;
close $socket;
Ciao!