2009-10-10 32 views

Trả lời

3
+1

+0. Tôi sẽ đồng ý nếu bạn thay vào đó đã nói "có, nhưng không thực sự". Đặc biệt bây giờ Chrome hỗ trợ nó, và tôi nghĩ Opera cũng vậy. – ANeves

0

Không có kiểm soát tệp HTML, không. Trình tải lên tệp flash có thể làm điều đó cho bạn. Bạn có thể sử dụng một số mã phía máy khách để kiểm tra phần mở rộng PDF sau khi họ chọn, nhưng bạn không thể trực tiếp kiểm soát những gì họ có thể chọn.

2

Không có cách nào để làm điều đó khác hơn là xác nhận mở rộng tập tin với JavaScript khi con đường đầu vào được phổ biến bởi bộ chọn tệp. Để thực hiện bất kỳ điều gì bạn cần để viết thành phần của riêng mình cho bất kỳ trình duyệt nào bạn muốn (activeX hoặc XUL)

Có thuộc tính "accept" trong HTML4.01 nhưng tôi không biết bất kỳ trình duyệt nào hỗ trợ nó - ví dụ: accept="image/gif,image/jpeg - vì vậy nó là một thông số gọn gàng nhưng không thực tế

+0

+1. Ngoài ra, Chrome hiện hỗ trợ tính năng này. Tôi đọc rằng Opera đã hỗ trợ nó trong một thời gian dài, nhưng tôi không có nó để kiểm tra. – ANeves

1

Có thể hữu ích để ngăn người dùng bị phân tâm thực hiện một lựa chọn không tự nguyện, nhưng trong mọi trường hợp, bạn phải thực hiện kiểm tra ở phía máy chủ.
Cách tốt nhất là phải rõ ràng trong trang tải lên. Sau đó, nếu người dùng ngớ ngẩn tải lên một tệp lớn với loại sai, đó là mất thời gian của họ, phải không?

34

Để có được HTML file đầu vào yếu tố hình thức để chỉ chấp nhận các file PDF, bạn có thể sử dụng accept thuộc tính trong các trình duyệt hiện đại như Firefox 9+, Chrome 16+, Opera 11 + và IE10 + như ví dụ:

<input name="file1" type="file" accept="application/pdf" />

Bạn có thể kết hợp nhiều loại mime với dấu phẩy.

Chuỗi sau sẽ chấp nhận định dạng JPG, PNG, GIF, PDF, và EPS file:

<input name="foo" type="file" accept="image/jpeg,image/gif,image/png,application/pdf,image/x-eps" />

Trong trình duyệt cũ hơn hộp thoại tập tin hệ điều hành bản địa không thể bị hạn chế - bạn sẽ phải sử dụng Flash hoặc một applet Java hoặc một cái gì đó tương tự để xử lý việc chuyển tập tin.

Và tất nhiên không cần phải nói rằng điều này không làm bất cứ điều gì để xác minh tính hợp lệ của loại tệp. Bạn sẽ làm điều đó ở phía máy chủ khi tệp đã được tải lên.

Cập nhật một chút - với javascript và FileReader API bạn có thể thực hiện xác thực phía máy khách trước khi tải tệp lớn lên máy chủ và kiểm tra lại.

1

Các áp phích trước đó gây ra một chút sai lầm. Thuộc tính accept chỉ là một bộ lọc hiển thị. Nó sẽ không xác thực mục nhập của bạn trước khi gửi.

Thuộc tính này buộc hộp thoại tệp chỉ hiển thị loại mime được yêu cầu. Nhưng người dùng có thể ghi đè bộ lọc đó. Anh ấy có thể chọn . và xem tất cả các tệp trong thư mục hiện tại. Bằng cách đó, anh ta có thể chọn bất kỳ tệp nào có bất kỳ phần mở rộng nào và gửi biểu mẫu.

Vì vậy, để trả lời áp phích gốc, KHÔNG. Bạn không thể giới hạn tệp đầu vào cho một tiện ích mở rộng cụ thể bằng cách sử dụng HTML.

Nhưng bạn có thể sử dụng javascript để kiểm tra tên tệp đã được chọn, ngay trước khi gửi. Chỉ cần chèn một thuộc tính onclick vào nút gửi của bạn và gọi mã sẽ kiểm tra giá trị tệp đầu vào. Nếu phần mở rộng bị cấm, bạn sẽ phải trả về false để vô hiệu hóa biểu mẫu. Thậm chí bạn có thể sử dụng trình xác nhận tùy chỉnh jQuery và v.v. để xác thực biểu mẫu.

Cuối cùng, bạn cũng sẽ phải kiểm tra phần mở rộng ở phía máy chủ. Cùng một vấn đề về kích thước tệp tối đa được phép.

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