2013-08-10 38 views
7

Provare a gestire più caricamenti di file con Plack.Gestione di più caricamenti di file con Plack

La mia forma:

<form id="file_upload" action="savefile" method="POST" enctype="multipart/form-data"> 
<input type="file" name="file[]" multiple> 
<button>upload</button> 
</form> 

selezionati due file, chiamati: x1 e x2. Il Data::Dumper risultato della:

my $u = $req->uploads; 

è

$VAR1 = bless({ 
    'file[]' => bless({ 
     'headers' => bless({ 
       'content-disposition' => 'form-data; name="file[]"; filename="x2"', 
       'content-type' => 'application/octet-stream', 
       '::std_case' => { 
        'content-disposition' => 'Content-Disposition' 
       } 
     }, 'HTTP::Headers'), 
     'filename' => 'x2', 
     'tempname' => '/var/folders/7l/nhyscwy14bjb_sxr_t2gynpm0000gn/T/7vt04wIrne', 
     'size' => 146 
    }, 'Plack::Request::Upload') 
}, 'Hash::MultiValue'); 

Quindi, contiene solo il secondo file x2, ma quando selezionato la cartella che contiene /var/folders/7l/nhyscwy14bjb_sxr_t2gynpm0000gn/T/entrambi i file caricato.

La domanda è: come posso ottenere entrambi i file nello script, non solo l'ultimo?

risposta

11
for my $upload ($req->upload('file[]')) { 
    $upload->filename; 
} 

È inoltre possibile chiamare @uploads = $req->uploads->get_all('file[]') per ottenere più valori.

Vedere perldoc Plack::Request (e Hash::MultiValue) per ulteriori dettagli.

Il motivo per cui non li si vede in Data :: Dumper è che Hash :: MultiValue utilizza una tecnica chiamata oggetto inside-out, per salvare valori alternativi per una determinata chiave.

Problemi correlati