複数ファイルアップロードの実装

multiple指定してuploadフォーム作るときの話

<input type="file" name="files" multiple />

で複数ファイル選択できるが
Perl CGIで受けるときに↓みたいにすると

my @files = $q->param('files');
for my $filename (@files) {
    my $fn = decode("UTF-8", $filename);
    move($q->tmpFileName($filename), "/path/to/dir");
}

iOSで選択するとfilenameが全部image.jpgでPOSTされてしまう可能性があるのでダメ
(AndroidとかはOK)
なのでこんな感じにする

my @fhs = $q->upload('files');
my %fname_count;
for my $fh (@fhs){
    my $out_filename = non_overlapping_filenames("$fh");
    my $io_handle = $fh->handle;
    open (my $wr,">", $out_filename) or die $!;
    while (<$io_handle>){
        print $wr $_;
    }
    close $wr;
    push(@result, decode("UTF-8","$fh"));
}

あと古めのアンドロイドはmultiple指定しても複数ファイル選択ができない
Andoroid4.0はダメだけど6.0だとOKだった

参考リンク