Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di C232
    Registrato dal
    Dec 2004
    Messaggi
    303

    [ Perl ] uplodare un file

    ragazzi ma come è possibile uplodare file da Perl?
    C/C++

  2. #2
    Cioè?
    Un modulo HTML che invia un file ad un CGI in perl?
    <input type=file name=MioFile> del tipo?

  3. #3
    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!

  4. #4
    Utente di HTML.it L'avatar di C232
    Registrato dal
    Dec 2004
    Messaggi
    303

    ...

    Grazie!
    C/C++

  5. #5
    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;

    Ragazzi potete aiutarmi a far funzionare questo codice? La risposta del server è ke il file non è stato caricato dal form..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.