2013-08-10 27 views
7

Thử xử lý nhiều tệp tải lên bằng Plack.Xử lý nhiều tệp tải lên bằng Plack

hình thức của tôi:

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

chọn hai tập tin, được gọi là: x1x2. Các Data::Dumper kết quả của:

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

Vì vậy, nó chỉ chứa các tập tin thứ hai x2, nhưng khi kiểm tra thư mục /var/folders/7l/nhyscwy14bjb_sxr_t2gynpm0000gn/T/ nó chứa cả file tải lên.

Câu hỏi đặt ra là làm cách nào để có thể nhận được cả hai tệp vào tập lệnh, không phải là tệp cuối cùng?

Trả lời

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

Bạn cũng có thể gọi @uploads = $req->uploads->get_all('file[]') để nhận nhiều giá trị.

Xem perldoc Plack::Request (và Hash::MultiValue) để biết thêm chi tiết.

Lý do bạn không nhìn thấy chúng trong Dữ liệu :: Dumper là Hash :: MultiValue sử dụng kỹ thuật được gọi là đối tượng bên trong, để lưu các giá trị thay thế cho một khóa nhất định.

Các vấn đề liên quan