Jquery结合HTML5实现文件上传


Posted in Javascript onJune 25, 2015

1.利用Jquery使用HTML5的FormData属性实现对文件的上传

在HTML5以前我们如果需要实现文件上传服务器等功能的时候,有时候我们不得不依赖于FLASH去实现,而在HTML5到来之后,我们很容易的实现对文件的上传,只需要利用HTML5的一个FormData属性,结合Jquery就很容易实现文件的上传,而且读取文件的上传进度,下面这个上传案例就是基于上面所说的实现的,下面我将所所有的JS和CSS以及HTML页面代码放在下面。

注意事项:FormData属性必须依赖于HTML5,所以如果你按照本文代码实现的功能,则浏览器必须升级为最新(支持HTML5 FormData属性)。

2.HTML页面代码如下

<!DOCTYPE html>
 
 <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta charset="utf-8" />
     <title>使用HTML的FormData属性实现文件上传</title>
     <link rel="stylesheet" href="../css/fileUpload.css" />
   </head>
   <body>
     <table id="uploadTable" style="border: 1px;"></table>
     <br/>
     <a href="javascript:void(0);" class="input-file">
       添加文件<input type="file" id="txtFile" style="width:200px;" />
     </a>
     <script type="text/javascript" src="../js/jquery-1.7.1-min.js"></script>
 
     <script type="text/javascript">
       $(function () {
         $('#uploadTable').SalesMOUNDUpload({
           saveUrl: '/Test/Save',
           jqInput: $('#txtFile'),
           fnRemove: removeFile,
           fnComplete: function (d) {
             window.console.log('complete ' + d);
           }
         });
       });
       function removeFile(d) {
         $.post('/Test/Remove', { "filename": d }, function(r) {
           
         });
       }
     </script>
   </body>
 </html>

3.CSS代码如下:

/*源文件头信息:
 <copyright file="FileUpload.js">
 Copyright(c)2014-2034 Kencery.All rights reserved.
 个人博客:http://www.cnblogs.com/hanyinglong
 创建人:韩迎龙(kencery)
 创建时间:2015-6-24
 </copyright>*/
 
 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 file="FileUpload.js">
// Copyright(c)2014-2034 Kencery.All rights reserved.
// 创建人:韩迎龙(kencery)
// 创建时间:2015-6-24
// </copyright>
;
(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 = $('<thead>');
        var $th_tr = $('<tr>');
        $th_tr.append('<th>文件名</th>');
        $th_tr.append('<th>类型</th>');
        $th_tr.append('<th>大小</th>');
        $th_tr.append('<th>状态</th>');
        $th_tr.append('<th>操作</th>');
        $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>');
        $tr.append('<td class="upload_name">' + file.name + '</td>');
        $tr.append('<td class="upload_type">' + file.type + '</td>');
        $tr.append('<td class="upload_size">' + getByteToM(file.size) + 'M' + '</td>');
        $tr.append('<td class="upload_status">' + 0 + '</td>');
        $tr.append('<td class="upload_action"><a href="javascript:void(0);">' + '取消' + '</a></td>');
        $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('<a href="javascript:void(0);">×</a>');
          $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 相关文章推荐
通过JAVAScript实现页面自适应
Jan 19 Javascript
JavaScript中的Screen屏幕对象
Jan 16 Javascript
JS提交并解析后台返回的XML的代码
Nov 03 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
May 15 Javascript
javascript 实现子父窗体互相传值的简单实例
Feb 17 Javascript
JS中JSON对象和String之间的互转及处理技巧
Apr 06 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
Jan 25 jQuery
利用Blob进行文件上传的完整步骤
Aug 02 Javascript
IE9 elementUI文件上传的问题解决
Oct 17 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
Aug 09 Javascript
解决vue自定义组件@click点击失效问题
Apr 30 Vue.js
浅谈jQuery.easyui的datebox格式化时间
Jun 25 #Javascript
javascript学习笔记之函数定义
Jun 25 #Javascript
把Node.js程序加入服务实现随机启动
Jun 25 #Javascript
javascript控制台详解
Jun 25 #Javascript
jquery实现浮动的侧栏实例
Jun 25 #Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 #Javascript
Node.js中的process.nextTick使用实例
Jun 25 #Javascript
You might like
php截取后台登陆密码的代码
2012/05/05 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
浅谈Express.js解析Post数据类型的正确姿势
2019/05/30 Javascript
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
Python:slice与indices的用法
2019/11/25 Python
Python 求数组局部最大值的实例
2019/11/26 Python
简单介绍django提供的加密算法
2019/12/18 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
如何写毕业求职自荐信
2013/11/06 职场文书
工作人员思想汇报
2014/01/09 职场文书
经销商会议欢迎词
2014/01/11 职场文书
敬老院标语
2014/06/27 职场文书
电子商务专业求职信
2014/07/10 职场文书
安全教育观后感
2015/06/17 职场文书
请病假条范文
2015/08/17 职场文书
《迟到》教学反思
2016/02/24 职场文书
子女赡养老人协议书
2016/03/23 职场文书