Điều này hoàn toàn có thể làm được. Sử dụng Javascript.
Tôi sử dụng jQuery để chọn phần tử đầu vào. Tôi đã thiết lập nó với một sự kiện thay đổi.
$("#aFile_upload").on("change", function (e) {
var count=1;
var files = e.currentTarget.files;
for (var x in files) {
var filesize = ((files[x].size/1024)/1024).toFixed(4);
if (files[x].name != "item" && typeof files[x].name != "undefined" && filesize <= 10) {
if (count > 1) {
approvedHTML += ", "+files[x].name;
}
else {
approvedHTML += files[x].name;
}
count++;
}
}
$("#approvedFiles").val(approvedHTML);
});
Đoạn mã trên lưu tất cả các tên tệp mà tôi cho là xứng đáng để lưu vào trang gửi trước khi quá trình gửi thực sự diễn ra. Tôi thêm các tệp "được chấp thuận" vào val của phần tử đầu vào bằng cách sử dụng jQuery để gửi biểu mẫu sẽ gửi tên của các tệp tôi muốn lưu. Tất cả các tệp sẽ được gửi, tuy nhiên, bây giờ ở phía máy chủ, chúng tôi phải lọc chúng ra. Tôi chưa viết bất kỳ mã nào cho điều đó, nhưng hãy sử dụng trí tưởng tượng của bạn. Tôi giả sử người ta có thể thực hiện điều này bằng vòng lặp for và khớp các tên được gửi từ trường nhập liệu và khớp chúng với biến $ _FILES (PHP Superglobal, xin lỗi tôi không biết biến tệp ruby).
Quan điểm của tôi là bạn có thể kiểm tra các tệp trước khi gửi. Tôi làm điều này và sau đó xuất nó cho người dùng trước khi họ gửi biểu mẫu, để cho họ biết những gì họ đang tải lên trang web của tôi. Bất kỳ thứ gì không đáp ứng tiêu chí sẽ không được hiển thị lại cho người dùng và do đó họ nên biết rằng các tệp quá lớn sẽ không được lưu. Điều này sẽ hoạt động trên tất cả các trình duyệt vì tôi không sử dụng đối tượng FormData.