2013-08-10 30 views
7

Plackで複数のファイルアップロードを処理しようとしています。Plackで複数のファイルアップロードを処理する

マイ形式:x1x2

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

と呼ばれる2つのファイルを、選択しました。 Data::Dumper結果:は

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'); 

あるので、それだけで二番目のファイルx2が含まれているが、それはがアップロード両方のファイルを含むフォルダ/var/folders/7l/nhyscwy14bjb_sxr_t2gynpm0000gn/T/をチェックしました。

質問はどうすれば最後のものではなく、スクリプトにファイルを取得できますか?

答えて

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

また、複数の値を取得するために@uploads = $req->uploads->get_all('file[]')を呼び出すことができます。

詳細については、perldoc Plack::Request(およびHash::MultiValue)を参照してください。

Data :: Dumperに表示されない理由は、Hash :: MultiValueがインサイドアウトオブジェクトと呼ばれる手法を使用して、指定されたキーの代替値を保存することです。

関連する問題