Hướng dẫn how to restrict file upload type in javascript? - làm thế nào để hạn chế loại tải lên tệp trong javascript?
Nói đúng ra, câu trả lời là không. Nhà phát triển không thể ngăn người dùng tải lên các tệp thuộc bất kỳ loại hoặc tiện ích mở rộng nào.no. A developer cannot prevent a user from uploading files of any type or extension. Show
Tuy nhiên, thuộc tính chấp nhận của 8 có thể giúp cung cấp bộ lọc trong hộp thoại Chọn tệp được cung cấp bởi trình duyệt/hệ điều hành của người dùng. Ví dụ,accept attribute of 8 can help to provide a filter in the file select dialog box provided by the user's browser/OS. For example,
nên cung cấp một cách để lọc ra các tệp khác với .xls hoặc .xlsx. Mặc dù trang MDN cho phần tử 9 luôn nói rằng nó hỗ trợ điều này, nhưng thật ngạc nhiên, điều này không hiệu quả với tôi trong Firefox cho đến phiên bản 42. Điều này hoạt động ở IE 10+, Edge và Chrome.Vì vậy, để hỗ trợ Firefox cũ hơn 42 cùng với IE 10+, Edge, Chrome và Opera, tôi đoán tốt hơn là sử dụng danh sách các loại MIME được phân tách bằng dấu phẩy:
[Edge (EdgeHTML) Hành vi: Dropdown bộ lọc loại tệp hiển thị các loại tệp được đề cập ở đây, nhưng không phải là mặc định trong danh sách thả xuống. Bộ lọc mặc định là 0.]Edge (EdgeHTML) behavior: The file type filter dropdown shows the file types mentioned here, but is not the default in the dropdown. The default filter is 0.]Bạn cũng có thể sử dụng dấu hoa thị trong các loại MIME. Ví dụ:
W3C khuyến nghị các tác giả chỉ định cả loại MIME và các tiện ích mở rộng tương ứng của chúng trong thuộc tính 1. Vì vậy, cách tiếp cận tốt nhất là:recommends authors to specify both MIME-types and their corresponding extensions in the 1 attribute. So, the best approach is:
JSfiddle giống nhau: ở đây. Tham khảo: Danh sách các loại mime List of MIME-types Quan trọng: Sử dụng thuộc tính 1 attribute only provides a way of filtering in the files of types that are of interest. Browsers still allow users to choose files of any type. Additional (client-side) checks should
be done (using JavaScript, one way would be this), and definitely file types MUST be verified on the server, using a combination of MIME-type using both the file extension and its binary signature (ASP.NET,
PHP, Ruby, Java). You might also want to refer to these tables for file types and their magic numbers, to perform a more robust server-side verification.Dưới đây là ba lần đọc tốt về tải trọng tệp và bảo mật. Chỉnh sửa: Có thể xác minh loại tệp bằng chữ ký nhị phân của nó cũng có thể được thực hiện ở phía máy khách bằng cách sử dụng JavaScript (thay vì chỉ nhìn vào phần mở rộng) bằng API tệp HTML5, nhưng vẫn phải xác minh tệp trên máy chủ, vì người dùng độc hại vẫn có thể tải lên các tệp bằng cách thực hiện yêu cầu HTTP tùy chỉnh. Maybe file type verification using its binary signature can also be done on client side using JavaScript (rather than just by looking at the extension) using HTML5 File API, but still, the file must be verified on the server, because a malicious user will still be able to upload files by making a custom HTTP request.
Thử nóGiá trịThuộc tính 5 đầu vào của tệp chứa một chuỗi đại diện cho đường dẫn đến (các) tệp đã chọn. Nếu chưa chọn tệp, giá trị là một chuỗi trống ( 6). Khi người dùng đã chọn nhiều tệp, 5 thể hiện tệp đầu tiên trong danh sách các tệp họ đã chọn. Các tệp khác có thể được xác định bằng thuộc tính 8 của đầu vào.Thuộc tính bổ sungNgoài các thuộc tính phổ biến được chia sẻ bởi tất cả các phần tử 3, các đầu vào loại 0 cũng hỗ trợ các thuộc tính sau.Chấp nhậnGiá trị thuộc tính 1 là một chuỗi xác định các loại tệp mà đầu vào tệp sẽ chấp nhận. Chuỗi này là một danh sách được phân tách bằng dấu phẩy của các nhà xác định loại tệp duy nhất. Bởi vì một loại tệp nhất định có thể được xác định theo nhiều cách, nên việc cung cấp một tập hợp các nhà xác định loại kỹ lưỡng khi bạn cần các tệp có định dạng nhất định.unique file type specifiers. Because a given file type may be identified in more than one manner, it's useful to provide a thorough set of type specifiers when you need files of a given format.Chẳng hạn, có một số cách có thể xác định được các tệp Microsoft Word, do đó, một trang web chấp nhận các tệp Word có thể sử dụng 3 như thế này:
chiếm lấyGiá trị thuộc tính 3 là một chuỗi chỉ định camera nào sẽ sử dụng để chụp dữ liệu hình ảnh hoặc video, nếu thuộc tính 1 chỉ ra rằng đầu vào phải thuộc một trong các loại đó. Giá trị của 5 chỉ ra rằng camera và/hoặc micrô phải đối mặt với người dùng. Giá trị của 6 chỉ định rằng camera hướng ra ngoài và/hoặc micrô nên được sử dụng. Nếu thuộc tính này bị thiếu, tác nhân người dùng có thể tự do quyết định những việc cần làm của riêng mình. Nếu chế độ đối diện được yêu cầu không có sẵn, tác nhân người dùng có thể quay trở lại chế độ mặc định ưa thích của nó.Lưu ý: 3 was previously a Boolean attribute which, if present, requested that the device's media capture device(s) such as camera or microphone be used instead of requesting a file input.nhiềuKhi thuộc tính boolean 8 được chỉ định, đầu vào tệp cho phép người dùng chọn nhiều hơn một tệp.Các thuộc tính không chuẩnNgoài các thuộc tính được liệt kê ở trên, các thuộc tính không chuẩn sau đây có sẵn trên một số trình duyệt. Bạn nên cố gắng tránh sử dụng chúng khi có thể, vì làm như vậy sẽ hạn chế khả năng mã của bạn hoạt động trong các trình duyệt không thực hiện chúng. 9Thuộc tính Boolean 9, nếu có, chỉ ra rằng chỉ các thư mục mới có sẵn để được người dùng chọn trong giao diện Picker tệp. Xem 1 để biết thêm chi tiết và ví dụ.Mặc dù ban đầu chỉ được triển khai cho các trình duyệt dựa trên WebKit, 9 cũng có thể sử dụng được trong Microsoft Edge cũng như Firefox 50 trở lên. Tuy nhiên, mặc dù nó có hỗ trợ tương đối rộng, nhưng nó vẫn không tiêu chuẩn và không nên được sử dụng trừ khi bạn không có sự thay thế.Trình xác định loại tệp duy nhấtTrình xác định loại tệp duy nhất là một chuỗi mô tả một loại tệp có thể được người dùng chọn trong phần tử 3 của loại 0. Mỗi trình xác định loại tệp duy nhất có thể có một trong các biểu mẫu sau:unique file type specifier is a string that describes a type of file that may be selected by the user in an
3 element of type 0. Each unique file type specifier may take one of the following forms:
Thuộc tính 1 lấy một chuỗi chứa một hoặc nhiều nhà xác định loại tệp duy nhất này làm giá trị của nó, được phân tách bằng dấu phẩy. Ví dụ: một trình chọn tệp cần nội dung có thể được trình bày dưới dạng hình ảnh, bao gồm cả các định dạng hình ảnh tiêu chuẩn và tệp PDF, có thể trông như thế này:
Sử dụng đầu vào tệpMột ví dụ cơ bản
Điều này tạo ra đầu ra sau: Bất kể thiết bị hoặc hệ điều hành của người dùng, đầu vào tệp cung cấp một nút mở hộp thoại Picker Picker cho phép người dùng chọn tệp. Bao gồm thuộc tính 8, như được hiển thị ở trên, chỉ định rằng nhiều tệp có thể được chọn cùng một lúc. Người dùng có thể chọn nhiều tệp từ trình chọn tệp theo bất kỳ cách nào mà nền tảng đã chọn của họ cho phép (ví dụ: bằng cách giữ sự thay đổi hoặc điều khiển, sau đó nhấp vào). Nếu bạn chỉ muốn người dùng chọn một tệp duy nhất cho mỗi 3, hãy bỏ qua thuộc tính 8.Nhận thông tin về các tệp đã chọnCác tệp đã chọn 'được trả về bởi thuộc tính 8 của phần tử, là đối tượng 6 chứa danh sách các đối tượng 7. 6 hoạt động giống như một mảng, vì vậy bạn có thể kiểm tra thuộc tính 9 của nó để nhận số lượng tệp đã chọn.Mỗi đối tượng 7 chứa các thông tin sau: 1Tên của tập tin. 2Một số chỉ định ngày và thời gian mà tệp được sửa đổi lần cuối, tính bằng mili giây kể từ thời đại Unix (ngày 1 tháng 1 năm 1970 lúc nửa đêm). 3 không dùng nữaDeprecatedMột đối tượng 4 đại diện cho ngày và thời gian mà tệp được sửa đổi lần cuối. Điều này không được sử dụng và không nên được sử dụng. Sử dụng 2 thay thế. 6Kích thước của tệp trong byte. 7Loại MIME của tập tin. 8 không chuẩnNon-standardMột chuỗi chỉ định đường dẫn của tệp so với thư mục cơ sở được chọn trong trình chọn thư mục (nghĩa là bộ chọn 0 trong đó thuộc tính 9 được đặt). Đây là không chuẩn và nên được sử dụng một cách thận trọng.Lưu ý: Bạn có thể đặt cũng như nhận được giá trị của 8 in all modern browsers; this was most recently added to Firefox, in version 57 (see
bug 1384030).Giới hạn các loại tệp được chấp nhậnThường thì bạn sẽ không muốn người dùng có thể chọn bất kỳ loại tệp tùy ý nào; Thay vào đó, bạn thường muốn họ chọn các tệp thuộc loại hoặc loại cụ thể. Ví dụ: nếu đầu vào tệp của bạn cho phép người dùng tải lên ảnh hồ sơ, bạn có thể muốn họ chọn các định dạng hình ảnh tương thích web, chẳng hạn như JPEG hoặc PNG. Các loại tệp có thể chấp nhận có thể được chỉ định với thuộc tính 1, có một danh sách phân tách bằng dấu phẩy các phần mở rộng tệp được phép hoặc các loại MIME. Vài ví dụ:
Hãy xem xét một ví dụ đầy đủ hơn:
Điều này tạo ra một đầu ra trông tương tự với ví dụ trước: Nó có thể trông giống nhau, nhưng nếu bạn thử chọn một tệp có đầu vào này, bạn sẽ thấy trình chọn tệp chỉ cho phép bạn chọn các loại tệp được chỉ định trong giá trị 1 (giao diện chính xác khác nhau giữa các trình duyệt và hệ điều hành).Thuộc tính 1 không xác nhận các loại của các tệp đã chọn; Nó cung cấp gợi ý cho các trình duyệt để hướng dẫn người dùng hướng tới việc chọn các loại tệp chính xác. Vẫn có thể (trong hầu hết các trường hợp) để người dùng chuyển đổi tùy chọn trong trình chọn tệp cho phép ghi đè này và chọn bất kỳ tệp nào họ muốn, sau đó chọn các loại tệp không chính xác.Do đó, bạn nên đảm bảo rằng thuộc tính 1 được sao lưu bằng cách xác thực phía máy chủ thích hợp.Ghi chú
Ví dụTrong ví dụ này, chúng tôi sẽ trình bày một trình chọn tệp nâng cao hơn một chút, tận dụng thông tin tệp có sẵn trong thuộc tính 8, cũng như hiển thị một vài thủ thuật thông minh.Lưu ý: Bạn có thể thấy mã nguồn đầy đủ cho ví dụ này trên GitHub-File-example.html (xem nó cũng trực tiếp). Chúng tôi sẽ không giải thích CSS; JavaScript là trọng tâm chính. You can see the complete source code for this example on GitHub — file-example.html (see it live also). We won't explain the CSS; the JavaScript is the main focus. Trước hết, chúng ta hãy nhìn vào HTML: 1 2Điều này tương tự như những gì chúng ta đã thấy trước đây - không có gì đặc biệt để bình luận. Tiếp theo, hãy đi qua JavaScript. Trong các dòng đầu tiên của tập lệnh, chúng tôi nhận được các tài liệu tham khảo cho chính đầu vào biểu mẫu và phần tử 7 với lớp 8. Tiếp theo, chúng tôi ẩn phần tử 3 - chúng tôi làm điều này bởi vì các đầu vào tệp có xu hướng xấu, khó tạo kiểu và không nhất quán trong thiết kế của chúng trên các trình duyệt. Bạn có thể kích hoạt phần tử 9 bằng cách nhấp vào 1 của nó, vì vậy tốt hơn là ẩn trực quan 9 và tạo kiểu cho nhãn như một nút, vì vậy người dùng sẽ biết tương tác với nó nếu họ muốn tải lên các tệp. 3Lưu ý: 3
is used to hide the file input instead of 4 or 5, because assistive technology interprets the latter two styles to mean the file input isn't interactive.Tiếp theo, chúng tôi thêm một trình nghe sự kiện vào đầu vào để lắng nghe các thay đổi đối với giá trị đã chọn của nó (trong trường hợp này, khi các tệp được chọn). Người nghe sự kiện gọi chức năng 6 tùy chỉnh của chúng tôi. 4Bất cứ khi nào hàm 6 được gọi, chúng tôi:
5Hàm 05 tùy chỉnh lấy đối tượng 7 làm tham số, sau đó sử dụng 16 để kiểm tra xem có bất kỳ giá trị nào trong 17 phù hợp với thuộc tính 7 của tệp không. Nếu một trận đấu được tìm thấy, hàm trả về 19. Nếu không tìm thấy trận đấu nào, nó sẽ trả về 20. 6Hàm 10 lấy một số (của byte, được lấy từ thuộc tính 6 của tệp hiện tại) và biến nó thành một kích thước được định dạng độc đáo trong byte/kb/mb. 7Ví dụ trông như thế này; Có một vở kịch: Thông số kỹ thuật
Tính tương thích của trình duyệt webBảng BCD chỉ tải trong trình duyệt Xem thêm
Làm cách nào để hạn chế loại tải lên tệp trong HTML?Giới hạn các loại tệp được chấp nhận Các loại tệp có thể chấp nhận có thể được chỉ định với thuộc tính Chấp nhận, có một danh sách được phân tách bằng dấu phẩy các phần mở rộng tệp được phép hoặc các loại MIME.Acceptable file types can be specified with the accept attribute, which takes a comma-separated list of allowed file extensions or MIME types.
Làm cách nào để hạn chế tải lên tệp trong React?Bạn có thể hạn chế kích thước tệp được phép tối đa (tính bằng byte) bằng cách sử dụng thuộc tính MaxFilesize.Nếu tệp đã chọn vượt quá kích thước tối đa, thông báo lỗi sẽ được hiển thị.by using the maxFileSize property. If the selected file exceeds the maximum size, an error message will be displayed.
Làm thế nào bạn có thể chỉ chấp nhận các tệp JPG và PNG bằng HTML5?Giới hạn các loại tệp được chấp nhận.. Chấp nhận = "Hình ảnh/PNG" hoặc Accept = ". PNG" - Chấp nhận các tệp PNG .. Chấp nhận = "Hình ảnh/png, hình ảnh/jpeg" hoặc Accept = ". Png,. Jpg,. .... Chấp nhận = "Hình ảnh/*" - Chấp nhận bất kỳ tệp nào có hình ảnh/* MIME.(Nhiều thiết bị di động cũng cho phép người dùng chụp ảnh bằng máy ảnh khi nó được sử dụng.). Chấp nhận = ". DOC, DOCX, .. Làm cách nào để tùy chỉnh tệp loại đầu vào?Có ba bước cho điều này:.. Bao bọc tệp đầu vào bên trong một phần tử nhãn.Chọn ảnh..... Thay đổi màn hình của thẻ đầu vào thành không có.Đầu vào {Display: Không có;}. Kiểu phần tử nhãn.Ở đây, bạn có thể thêm nhiều yếu tố hoặc biểu tượng.Đây là nơi ma thuật xuất hiện. Nhãn {. |