视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
html5如何实现客户端验证上传文件的大小
2020-11-27 16:41:40 责编:小采
文档

在HTML 5中,现在可以在客户端进行文件上传时的校验了,比如用户选择文件后,可以马上校验文件的大小和属性等,这其实时得益于浏览器端新增的对文件的校验能力,其中支持HTML 5的浏览器,都会实现W3C实现的文件API标准,其中可以读取客户端文件的各种信息和参数。

下面的例子如下,首先是HTML

?

这里data-file_type属性中,指定了文件的类型,接受ZIP,PNG文件,用|分隔开来,其中data-max-size指定文件的大小,这里是1MB。然后使用jquery 进行判断

$('input[type=file]').each(function() 
{ 
 if(typeof $(this).attr('data-file_type') == 'string') 
 { 
 var file_types = $(this).attr('data-file_type').split('|'); 
 } 
 
 var mimes = get_mimes(file_types); 
 
 //文件要求的指定大小 
 var max_size = parseInt($(this).attr('data-max_size')); 
 
 $(this).change(function(evt) 
 { 
 var finput = $(this); 
 
 var files = evt.target.files; // 获得文件对象 
 
 var output = []; 
 
 for (var i = 0, f; f = files[i]; i++) 
 { 
 //检查文件的类型是否符合指定要求 
 if(jQuery.inArray(f.type , mimes) == -1) 
 { 
 alert('File type '+ f.type + ' not allowed'); 
 $(this).val(''); 
 continue; 
 } 
 
 //检查文件大小 
 else if(f.size > max_size) 
 { 
 alert('Maximum file size is ' + max_size + ' bytes.'); 
 $(this).val(''); 
 } 
 
 //Validation ok 
 else 
 { 
 output.push('[b]', f.name, '[/b] (', f.type || 'n/a', ') - ', f.size, ' bytes, last modified: ', f.lastModifiedDate.toLocaleDateString() ); 
 } 
 } 
 
 finput.after('' + output.join('') + ''); 
 }); 
}); 

在上面的代码中, var mimes = get_mimes(file_types); 其实是一个方法,如下:

/* 
 Get the mimes of a list of extensions as an array 
*/ 
function get_mimes(extensions) 
{ 
 var mimes = []; 
 for(var i in extensions) 
 { 
 var ext = extensions[i]; 
 
 if(ext in mime_types) 
 { 
 var mime = mime_types[ext]; 
 
 if($.isArray(mime)) 
 { 
 jQuery.merge(mimes , mime); 
 } 
 else 
 { 
 mimes.push(mime); 
 } 
 } 
 } 
 
 return mimes; 
} 

这里其实就是将ZIP,PNG这样的类型传入,然后返回一个这类文件对应的MIME/TYPE,比如定义一个 mime_types数组,如下:

var mime_types = { 
"gif":"image\/gif", 
"jpeg":["image\/jpeg","image\/pjpeg"], 
"jpg":["image\/jpeg","image\/pjpeg"], 
"jpe":["image\/jpeg","image\/pjpeg"], 
"png":["image\/png","image\/x-png"], 
.................. 
} 

重点关注的是HTML 5中,新的文件API,可以在客户端马上判断文件类型,如下:

var files = evt.target.files; // 获得文件对象,是一个集合,可以有多个文件 
var file_count = files.length; //文件长度 

var file_1 = files[0]; // or files.item(0);这里获得多个文件中的第一个文件 

var name = file_1.name; //获得文件名 
var size = file_1.size;//获得文件大小 
var type = file_1.type; //文件类型 
var lastModifiedDate = file_1.lastModifiedDate; //文件修改时间 

详细的关于HTML 5文件上传的,见: http://www.w3.org/TR/file-upload/

下载本文
显示全文
专题