html5 如何实现客户端验证上传文件的大小
时间:2016-05-13
在HTML 5中,现在可以在客户端进行文件上传时的校验了,比如用户选择文件后,可以 马上校验文件的大小和属性等。本文章向码农介绍html5 如何实现客户端验证上传文件的大小,感兴趣的码农可以参考一下。
在HTML 5中,现在可以在客户端进行文件上传时的校验了,比如用户选择文件后,可以马上校验文件的大小和属性等,这其实时得益于浏览器端新增的对文件的校验能力,其中支持HTML 5的浏览器,都会实现W3C实现的文件API标准,其中可以读取客户端文件的各种信息和参数。
下面的例子如下,首先是HTML
<input type="file" data-file_type="zip|png" data-max_size="1000000">
这里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('<div>' + output.join('') + '</div>');
});
});
在上面的代码中, 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/
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- C++核心准则T.40: 使用函数对象向算法传递操作
- web页面性能优化总结及原理解释
- C++核心准则T.41:在模板概念中只对本质属性定义需求
- Linux实用技巧——mail发送邮件命令以及中文乱码解决
- Julia机器学习实战——使用Random Forest随机森林进行字符图像识别
- Python函数——Numpy size()
- Day 1:二维数组中查找
- Day 2:替换空格
- Prometheus监控神器-Kubernetes篇(三)
- julia简易教程——安装Julia+jupyter notebooks
- Julia 终于正式发布了
- awk 列求和计算
- C++复习笔记——0_零碎问题及解决笔记
- C++复习笔记——C++ 关键字
- python函数——字典设置默认值 setdefault()