1.利用Jquery使用HTML5的FormData属性实现对文件的上传
在HTML5以前我们如果需要实现文件上传服务器等功能的时候,有时候我们不得不依赖于FLASH去实现,而在HTML5到来之后,我们很容易的实现对文件的上传,只需要利用HTML5的一个FormData属性,结合Jquery就很容易实现文件的上传,而且读取文件的上传进度,下面这个上传案例就是基于上面所说的实现的,下面我将所所有的JS和CSS以及HTML页面代码放在下面。
注意事项:FormData属性必须依赖于HTML5,所以如果你按照本文代码实现的功能,则浏览器必须升级为最新(支持HTML5 FormData属性)。
2.HTML页面代码如下
使用HTML的FormData属性实现文件上传
添加文件
3.CSS代码如下:
body
{
font-family: "微软雅黑";
font-size: 12px;
}
.input-file {
overflow: hidden;
position: relative;
}
.input-file input {
opacity: 0;
filter: alpha(opacity=0);
font-size: 100px;
position: absolute;
top: 0;
right: 0;
}
#uploadTable {
width: 500px;
border-collapse: collapse;
border: 1px solid Silver;
}
4.JS代码如下:
// 源文件头信息: //// Copyright(c)2014-2034 Kencery.All rights reserved. // 创建人:韩迎龙(kencery) // 创建时间:2015-6-24 // ; (function($) { $.fn.SalesMOUNDUpload = function(options) { var defaults = { saveUrl: '', jqInput: '', maxSize: 1024 * 1024 * 100, //100M fnRemove: '', //移除文件 ,参数:文件名 fnComplete: '' //每个文件成功 ,参数:服务器端返回内容 }; var opt = $.extend(defaults, options); function getByteToM(val) { if (isNaN(val)) return val; val = val / (1024 * 1024); val = Math.round(val * 100) / 100; return val; } return this.each(function() { var $this = $(this); $this.empty(); if (typeof FormData == 'undefine') { alert('浏览器版本太低,不支持改上传!'); return; } //表头 if ($this.find('thead').length == 0) { var $thead = $(''); var $th_tr = $(''); $th_tr.append(' 文件名 '); $th_tr.append('类型 '); $th_tr.append('大小 '); $th_tr.append('状态 '); $th_tr.append('操作 '); $th_tr.appendTo($thead); $this.append($thead); } opt.jqInput[0].addEventListener('change', function(e) { var file = this.files[0]; if (!file) { return; } if (file.size > opt.maxSize) { window.alert('文件超过最大'); return; } var fd = new FormData(); var $table = $this; fd.append("uploadFile", file); var xhr = new XMLHttpRequest(); xhr.open('POST', opt.saveUrl, true); xhr.upload.addEventListener("progress", uploadProgress, false); xhr.addEventListener("load", uploadComplete, false); xhr.addEventListener("error", uploadFailed, false); xhr.addEventListener("abort", uploadCanceled, false); //表中内容 var $tr = $(''); $tr.append(' ' + file.name + ' '); $tr.append('' + file.type + ' '); $tr.append('' + getByteToM(file.size) + 'M' + ' '); $tr.append('' + 0 + ' '); $tr.append('' + '取消' + ' '); $tr.find('.upload_action a').unbind('click').bind('click', function() { xhr.abort(); }); $table.append($tr); function uploadProgress(evt) { if (evt.lengthComputable) { var percentComplete = Math.round(evt.loaded * 100 / evt.total); $tr.find('.upload_status').html(Math.round(percentComplete) + '%'); } else { $tr.find('.upload_status').html('unable to compute'); } } function uploadComplete(evt) { if (evt.target.status == 200) { $tr.find('.upload_status').html('已完成'); $tr.find('.upload_action a').html('删除'); if (typeof opt.fnComplete == 'function') { opt.fnComplete(evt.target.response); } $tr.find('.upload_action').unbind('click').bind('click', removeFile); } } function uploadFailed() { $tr.find('.upload_status').html('×'); $tr.find('.upload_status a').unbind('click').bind('click', function() { $tr.remove(); }); $tr.find('.upload_action a').html('重试'); $tr.find('.upload_action a').unbind('click').bind('click', function() { xhr.send(fd); }); } function uploadCanceled() { $tr.remove(); } function removeFile() { $tr.remove(); if (typeof opt.fnRemove == 'function') { opt.fnRemove(file.name); } } xhr.send(fd); }, false); }); }; }(jQuery));5.代码查看地址:https://github.com/kencery/Common/tree/master/KenceryCommonMethod/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0
以上所述就是本文的全部内容了,希望大家能够喜欢。
JavaScript相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile
热门相关搜索路由器设置 木托盘 宝塔面板 儿童python教程 心情低落 朋友圈 vim 双一流学科 专升本 我的学校 日记学校 西点培训学校 汽修学校 情书 化妆学校 塔沟武校 异形模板 西南大学排名 最精辟人生短句 6步教你追回被骗的钱 南昌大学排名 清朝十二帝 北京印刷学院排名 北方工业大学排名 北京航空航天大学排名 首都经济贸易大学排名 中国传媒大学排名 首都师范大学排名 中国地质大学(北京)排名 北京信息科技大学排名 中央民族大学排名 北京舞蹈学院排名 北京电影学院排名 中国戏曲学院排名 河北政法职业学院排名 河北经贸大学排名 天津中德应用技术大学排名 天津医学高等专科学校排名 天津美术学院排名 天津音乐学院排名 天津工业大学排名 北京工业大学耿丹学院排名 北京警察学院排名 天津科技大学排名 北京邮电大学(宏福校区)排名 北京网络职业学院排名 北京大学医学部排名 河北科技大学排名 河北地质大学排名 河北体育学院排名



