我有一个带有文件上传功能的表单,如果用户试图上传的文件太大,我想要实现一些漂亮的客户端错误报告,是否有办法使用jQuery检查文件大小,无论是在纯客户端上还是通过将文件发送回服务器进行检查?
我有一个带有文件上传功能的表单,如果用户试图上传的文件太大,我想要实现一些漂亮的客户端错误报告,是否有办法使用jQuery检查文件大小,无论是在纯客户端上还是通过将文件发送回服务器进行检查?
<input type="file" id="myFile" />
//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);
});
旧浏览器支持
请注意,旧版本浏览器会返回null
值作为上一个this.files
调用的结果,因此访问this.files[0]
将引发异常,您应该检查文件API支持后再使用它。
validate
,可以通过创建以下方法来实现:$.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)
});
你可以使用它:$('#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" }
});
accept
规则,应该使用 extension
规则。 accept
规则仅适用于 MIME 类型。 extension
规则 用于文件扩展名。您还需要包含 additional-methods.js
文件 来使用这些规则。 - Sparky$('#formid').validate({ rules: { inputimage: { required: true, extension: "png|jpe?g|gif", filesize: 1048576 }}, messages: { inputimage: "文件必须是JPG,GIF或PNG格式,小于1MB" } });
- victorf这段代码:
$("#yourFileInput")[0].files[0].size;
返回表单输入文件的大小。
在Firefox 3.6及以上版本中,应该使用以下代码:
$("#yourFileInput")[0].files[0].fileSize;
使用以下方法检查文件大小,如果超过限制则进行清理:
$("input[type='file']").on("change", function () {
if(this.files[0].size > 2000000) {
alert("Please upload file less than 2MB. Thanks!!");
$(this).val('');
}
});
我也发布一下我的解决方案,用于 ASP.NET 的 FileUpload
控件。
或许有人会发现它很有用。
$(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;
}
})
});
f = this.files[0]
的值进行空值检查,否则在旧版浏览器上会出现错误。例如:if (f && (f.size > 8388608 || f.fileSize > 8388608))
。 - iCollect.it Ltdvar sizeInKB = input.files[0].size/1024; //Normally files are in bytes but for KB divide by 1024 and so on
var sizeLimit= 30;
if (sizeInKB >= sizeLimit) {
alert("Max file size 30KB");
return false;
}
<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>
var size = $('#uploadForm')["0"]["0"].files["0"].size;
这个代码以前可以运行,但现在在Chrome上不行了。我刚刚测试了上面的代码,在Firefox和Chrome(最新版本)中都可以运行。第二个["0"]现在是firstChild。
你可以使用Flash或Silverlight进行此类检查,但不能使用JavaScript。 JavaScript沙箱不允许访问文件系统。 大小检查需要在上传后在服务器端进行。
如果要使用Silverlight / Flash方法,则可以检查是否未安装并将其默认为使用正常控件的常规文件上传处理程序。 这样,如果他们安装了Silverlight / Flash,他们的体验将更加丰富。
HTML 代码:
<input type="file" id="upload" class="filestyle" onchange="SizeCheck();"/>
JavaScript 函数:
function SizeCheck() {
var fileInput = document.getElementById('upload').files;
var fsize = fileInput[0].size;
var file = Math.round((fsize / 1024));
if (file >= 10240) { //10MB
//Add Alert Here If
$('#upload_error').html("* File Size < 10MB");
}
else {
$('#invoice_error').html("");
}
}
<script>
if (Math.round((document.getElementById('Your_input_id').files[0].size / 1024)>= 1024) { //2MB
$("#your_error_id").html("File Size < 1MB");
$("#your_error_id").css("color", "#dd4b39");
$("#Your_input_id").val('');
return false;
}
</script>
jQuery
的 JavaScript 文件没有被添加(或者没有被正确加载)。你在页面的head
中添加了它吗? - Felipe Sabino