Tôi có một biểu mẫu có khả năng tải lên tệp và tôi muốn có thể có một số báo cáo lỗi phía khách hàng tốt đẹp nếu tệp mà người dùng đang cố tải lên quá lớn, có cách kiểm tra kích thước tệp với jQuery không, hoặc hoàn toàn trên máy khách hoặc bằng cách nào đó đăng tải tệp lên máy chủ để kiểm tra?Làm cách nào để kiểm tra kích thước đầu vào của tệp bằng jQuery?
Trả lời
Bạn thực sự không có quyền truy cập hệ thống tệp (ví dụ: đọc và ghi tệp cục bộ), do đặc tả Tệp Api HTML5, có một số thuộc tính tệp mà bạn có quyền truy cập và kích thước tệp là của họ.
Đối với HTML bên dưới
<input type="file" id="myFile" />
hãy thử như sau:
//binds to onchange event of your input field
$('#myFile').bind('change', function() {
//this.files[0].size gets the size of your file.
alert(this.files[0].size);
});
Vì nó là một phần của đặc tả HTML5, nó sẽ chỉ làm việc cho các trình duyệt hiện đại (v10 cần thiết cho IE) và Tôi đã thêm here chi tiết và liên kết khác về thông tin tệp khác mà bạn nên biết: http://felipe.sabino.me/javascript/2012/01/30/javascipt-checking-the-file-size/
trình duyệt cũ hỗ trợ
Hãy nhận biết rằng các trình duyệt cũ sẽ trả về một giá trị null
cho this.files
gọi trước, vì vậy việc tiếp cận this.files[0]
sẽ nâng cao một ngoại lệ và bạn nên check for File API support trước khi sử dụng nó
Bạn có thể thực hiện loại kiểm tra này bằng Flash hoặc Silverlight chứ không phải Javascript. Hộp cát javascript không cho phép truy cập vào hệ thống tệp. Kích thước kiểm tra sẽ cần phải được thực hiện phía máy chủ sau khi nó đã được tải lên.
Nếu bạn muốn sử dụng tuyến Silverlight/Flash, bạn có thể kiểm tra xem chúng có được cài đặt mặc định cho trình xử lý tải lên tệp thông thường sử dụng các điều khiển thông thường hay không. Bằng cách này, nếu Silverlight/Flash đã cài đặt, trải nghiệm của họ sẽ giàu hơn một chút.
Nếu bạn muốn sử dụng jQuery validate
bạn có thể bằng cách tạo ra phương pháp này:
$.validator.addMethod('filesize', function(value, element, param) {
// param = size (en bytes)
// element = element to validate (<input>)
// value = value of the element (file name)
return this.optional(element) || (element.files[0].size <= param)
});
bạn sẽ sử dụng nó:
$('#formid').validate({
rules: { inputimage: { required: true, accept: "png|jpe?g|gif", filesize: 1048576 }},
messages: { inputimage: "File must be JPG, GIF or PNG, less than 1MB" }
});
Điều này không hoạt động với IE – Dan
@Đúng, thuộc tính kích thước tệp là một phần của Đặc tả HTML5, vì vậy nó sẽ chỉ hoạt động cho các trình duyệt hiện đại (đối với IE nó sẽ là phiên bản 10+) –
Bạn đã sử dụng sai quy tắc 'accept', ở đó bạn nên sử dụng quy tắc' extension'. ~ [Quy tắc 'accept'] (http://jqueryvalidation.org/accept-method/) chỉ dành cho các loại MIME. [Quy tắc 'mở rộng'] (http://jqueryvalidation.org/extension-method/) dành cho phần mở rộng tệp. Bạn cũng cần bao gồm [tệp 'additional-methods.js'] (http://cdn.jsdelivr.net/jquery.validation/1.13.1/additional-methods.js) cho các quy tắc này. – Sparky
Mã này:
$("#yourFileInput")[0].files[0].size;
Trả về kích thước tập tin cho một đầu vào hình thức.
Mở FF 3.6 và phiên bản mã này nên là:
$("#yourFileInput")[0].files[0].fileSize;
Mã nắm tay của bạn hoạt động trong chrome nhưng giây không hoạt động đối với FireFox mới nhất. –
mã đầu tiên hoạt động tốt trong FireFox. – Dhwani
Mã thứ hai đó là thứ tôi phải sử dụng cho tất cả các trình duyệt hiện đại (2014+). – Dreamcasting
Tôi gửi bài giải pháp của tôi cũng vậy, sử dụng cho một ASP.NET FileUpload
kiểm soát. Có lẽ ai đó sẽ thấy nó hữu ích.
$(function() {
$('<%= fileUploadCV.ClientID %>').change(function() {
//because this is single file upload I use only first index
var f = this.files[0]
//here I CHECK if the FILE SIZE is bigger than 8 MB (numbers below are in bytes)
if (f.size > 8388608 || f.fileSize > 8388608)
{
//show an alert to the user
alert("Allowed file size exceeded. (Max. 8 MB)")
//reset file upload control
this.value = null;
}
})
});
Bạn cần phải kiểm tra giá trị của 'f = this.files [0]' hoặc điều này sẽ thất bại trên các trình duyệt cũ hơn. ví dụ. 'if (f && (f.size> 8388608 || f.fileSize> 8388608))' –
<form id="uploadForm" class="disp-inline" role="form" action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
</form>
<button onclick="checkSize();"></button>
<script>
function checkSize(){
var size = $('#uploadForm')["0"].firstChild.files["0"].size;
console.log(size);
}
</script>
Tôi thấy điều này là dễ nhất nếu bạn không có kế hoạch đệ trình các hình thức thông qua tiêu chuẩn ajax/html5 phương pháp, nhưng tất nhiên nó hoạt động với bất cứ điều gì.
GHI CHÚ:
var size = $('#uploadForm')["0"]["0"].files["0"].size;
này được sử dụng để làm việc, nhưng nó không trong chrome nữa, tôi chỉ cần kiểm tra các mã trên và nó hoạt động trong cả ff và chrome (mới nhất). Thứ hai ["0"] bây giờ là firstChild.
- 1. Kiểm tra tệp đầu vào JQuery
- 2. Làm cách nào để kiểm tra kích thước tệp trong tập lệnh batch của Windows?
- 3. NSFileManager - Kiểm tra kích thước tệp?
- 4. Khách hàng Kiểm tra kích thước tệp bằng HTML5?
- 5. Cách kiểm tra kích thước tệp khi tải lên
- 6. Cách kiểm tra kích thước tệp trong python?
- 7. Kiểm tra đầu vào trống với jQuery
- 8. Trong Python, làm cách nào để kiểm tra kích thước của đối tượng StringIO?
- 9. Làm thế nào để kiểm tra kích thước của tệp được tải lên một cách an toàn trong bottlepy?
- 10. Làm cách nào để kiểm soát tệp nhật ký với kích thước tệp hàng ngày và kích thước tệp tối đa bằng log4j?
- 11. Làm cách nào để xác định kích thước tệp mở bằng Python?
- 12. Asp.Net Kiểm tra kích thước tệp trước khi tải lên
- 13. Cách kiểm soát kích thước/kích thước của ô bằng ggplot2
- 14. Làm cách nào để hạn chế kích thước tệp loại tệp tải lên bằng PHP?
- 15. vấn đề kích thước tệp đầu vào trong safari để chọn nhiều tệp
- 16. Các cách khác để kiểm tra kích thước tệp trước khi tải lên
- 17. Làm thế nào để kiểm tra khi nào div thay đổi kích thước, sử dụng Javascript hoặc Jquery
- 18. Hadoop MapReduce: Kích thước tệp đầu vào phù hợp?
- 19. làm cho việc kiểm tra và kiểm tra cần các tệp đầu vào
- 20. Làm thế nào để kiểm tra kích thước của một phao trong python?
- 21. Làm thế nào để có được kích thước của kiểm tra và khoảng cách trong hộp kiểm?
- 22. Làm cách nào để nhận được kích thước tệp bằng megabyte bằng Perl?
- 23. Cách kiểm tra nút radio được kiểm tra bằng JQuery?
- 24. Làm thế nào để giảm kích thước mp4 bằng cách sử dụng FFMPEG lib vào android
- 25. Kích thước của hộp văn bản đầu vào được xác định bằng HTML như thế nào?
- 26. Kiểm tra xem có đầu vào nào có tiêu điểm
- 27. Làm cách nào để đặt kích thước ban đầu cho một từ điển bằng Python?
- 28. Xác định mã hóa đầu vào bằng cách kiểm tra byte đầu vào
- 29. Làm cách nào để đệm luồng đầu vào/đầu ra/tệp Java của tôi đúng cách?
- 30. Làm cách nào để kiểm tra trang web bằng XAMPP?
Mọi người đều nói rằng điều này không thể thực hiện được - nhưng ở đây. Những công việc này. Tôi đã thử nghiệm nó. – Peter
nó sẽ không hoạt động trong ie8. –
@ Jeroen Tôi đồng ý rằng không làm việc cho IE làm cho nó không phải là giải pháp lý tưởng cho nhiều người, nhưng không đưa ra một cuộc bỏ phiếu xuống và nói rằng câu trả lời là vô ích một chút quá nhiều? Tôi đã sử dụng giải pháp này trong nhiều giải pháp web doanh nghiệp có phạm vi nhu cầu chỉ hoạt động trong chrome và/hoặc firefox và một số người tìm kiếm giải pháp này có thể ở cùng một vị trí, vì vậy giải pháp này sẽ đủ tốt . –