WEB文件上传之JQuery ajaxfileupload插件使用(二)

1.JQuery ajaxfileupload插件使用准备

下载地址:

http://www.phpletter.com/DOWNLOAD/

 

2.原理分析

ajaxfileupload也是利用iframe实现无刷新异步提交,与我的上一篇文章(WEB文件上传之apache common upload使用(一))中对iframe使用的方式有些不同。ajaxfileupload是通过监听iframe的onload方法来实现, 当从服务端处理完成后,就触发iframe的onload事件调用其绑定的方法,在绑定的方法中获取iframe中服务器返回的数据体(支持的普通文本,json,xml,script, html)

 

3.具体使用

jsp页面

Html代码 

 收藏代码

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3. <head>  
  4.     <title>JQuery ajaxfileupload文件上传</title>  
  5.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  6.     <link type="text/css" rel="stylesheet" href="css/ajaxfileupload.css" >  
  7.     <script type="text/javascript" src="js/jquery/jquery-1.9.1.js"></script>  
  8.     <script type="text/javascript" src="js/jquery/ajaxfileupload.js"></script>  
  9.       
  10.     <script type="text/javascript">  
  11.   
  12.     //定时器对象  
  13.     var uploadProcessTimer = null;  
  14.   
  15.     //获取文件上传进度  
  16.     function getFileUploadProcess() {  
  17.         $.get('/upload/getFileProcessServlet', function(data) {  
  18.             $('#fileUploadProcess').html(data);  
  19.         });  
  20.     }  
  21.   
  22.     function ajaxFileUpload()  
  23.     {  
  24.         //设置加载图标的显示  
  25.         $('#loading').show();  
  26.         uploadProcessTimer = window.setInterval(getFileUploadProcess, 20);  
  27.   
  28.         $.ajaxFileUpload  
  29.         ({  
  30.             url:'/upload/ajaxUploadServlet',  
  31.             secureuri:false,  
  32.             fileElementId:'fileToUpload',  
  33.             dataType: 'json',  
  34.             data:{name: $('#name').val()},  
  35.             success: function (data, status)  
  36.             {  
  37.                 //清除定时器  
  38.                 if(uploadProcessTimer) {  
  39.                     window.clearInterval(uploadProcessTimer);  
  40.                 }  
  41.                 $('#loading').hide();  
  42.                 var message = data['message'];  
  43.                 var code = data['code'];  
  44.                 if(code != 200) {  
  45.                     $('#fileUploadProcess').html('0%');  
  46.                 }  
  47.                 if(message)  
  48.                 {  
  49.                     alert(data.message);  
  50.                 }  
  51.             },  
  52.             error: function (data, status, e)  
  53.             {  
  54.                 //清除定时器  
  55.                 if(uploadProcessTimer) {  
  56.                     window.clearInterval(uploadProcessTimer);  
  57.                 }  
  58.                 $('#loading').hide();  
  59.                 //这里处理的是网络异常,返回参数解析异常,DOM操作异常  
  60.                 alert("上传发生异常");  
  61.             }  
  62.         })  
  63.   
  64.         return false;  
  65.     }  
  66.     </script>  
  67. </head>  
  68. <body>  
  69. <h2>JQuery ajaxfileupload文件上传</h2>  
  70. <img id="loading" src="images/loading.gif" style="display:none;">  
  71. 用户信息:  <br/>  
  72.     姓名:<input id="name" name="name" type="text"> <br/>  
  73.     附件:<input id="fileToUpload", name="file1" type="file" class="input"> <br/>  
  74.     <br><br>  
  75.     <input type="button" οnclick="return ajaxFileUpload();" value="上传"><br/>  
  76. 上传进度:<label id="fileUploadProcess"></label>  
  77. </body>  
  78. </html>  

 

服务端处理修改

由原来的返回script改为纯JSON数据格式的返回

AjaxUploadFileServlet.java关键变动

Java代码 

 收藏代码

  1. /** 
  2.  * 返回结果函数 
  3.  * @param response 
  4.  * @param state 
  5.  */  
  6. private void responseMessage(HttpServletResponse response, State state) {  
  7.     response.setCharacterEncoding(encode);  
  8.     response.setContentType("text/html; charset=" + encode);  
  9.     Writer writer = null;  
  10.     try {  
  11.         writer = response.getWriter();  
  12.         writer.write("{\"code\":" + state.getCode() +",\"message\":\"" + state.getMessage()+ "\"}");  
  13.         writer.flush();  
  14.         writer.close();  
  15.     } catch(Exception e) {  
  16.         logger.error(e.getMessage(), e);  
  17.     } finally {  
  18.         IOUtils.closeQuietly(writer);  
  19.     }  
  20. }  

 

4.总结

ajaxfileupload插件简化了文件上传的过程,页面上无需定义from表单,提交时自动完成临时form表单创建target为临时创建的iframe, 并将file控件复制一份到表单内进行提交,完成提交后自动销毁临时生成的form表单和iframe。

缺点:不支持多个file控件,不过这种解决方案也不适合进行多文件的提交,所以无伤大雅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Navicat安装激活

有条件的同学麻烦不要使用下面的激活步骤&#xff0c;仅供个人学习使用 。。。。。。 。。。。。。 。。。。。。 。。。。。。 一、去官网下载最新Navicat软件https://www.navicat.com.cn/download/navicat-premium 二、去下载激活脚本https://github.com/DoubleLabyrinth/nav…

WEB文件上传之apache common upload使用(一)

文件上传一个经常用到的功能&#xff0c;它有许多中实现的方案。 页面表单 RFC1897规范 http协议上传 页面控件(flash/html5/activeX/applet) RFC1897规范 http协议上传 页面控件(flash/html5/activeX/applet) 自定义数据规范 http协议上传 页面控件(flash/html5/act…

前端CSS学习笔记

一 CSS介绍 层叠样式表(英文全称&#xff1a;Cascading Style Sheets)是一种用来表现HTML&#xff08;超文本标记语言&#xff09;或XML&#xff08;标准通用标记语言的一个子集&#xff09;等文件样式的计算机语言。CSS不仅可以静态地修饰网页&#xff0c;还可以配合各种脚本语…

Java爬取并下载酷狗音乐

本文方法及代码仅供学习&#xff0c;仅供学习。 案例&#xff1a; 下载酷狗TOP500歌曲&#xff0c;代码用到的代码库包含&#xff1a;Jsoup、HttpClient、fastJson等。 正文&#xff1a; 1、分析是否可以获取到TOP500歌单 打开酷狗首页&#xff0c;查看TOP500&#xff0c;发现存…

Webpack/Vue-cli两种方式加载markdown文件并实现代码高亮

准备的资源&#xff1a; highlight.js &#xff1a; 实现代码高亮&#xff0c;通过npm install highlight.js -D安装 vue-markdown-loader&#xff1a;解析md文件的必备loader&#xff0c;通过npm install vue-markdown-loader -D安装 下面我们分两个场景来说明一下md文件的…

新浪微博第三方登陆重定向错误23123

新浪微博第三方登陆重定向错误23123 2019年06月02日 13:49:43 温室花朵 阅读数&#xff1a;2更多 个人分类&#xff1a; 第三方微博登陆21323编辑当我们使用微博第三方登陆的时候&#xff0c;发现登陆出错了&#xff0c;错误码为&#xff1a;21323&#xff0c;解决方案如下&…

Utility Manager 的一些百度不了的操作

一进来是不是这样的&#xff01; 那突然出了点问题&#xff0c;咋办呢&#xff01; 就像这样子的&#xff0c; 恢复默认布局就OK啦&#xff01;哈哈哈&#xff0c;太聪明啦&#xff0c;但是百度了好长时间还是找不到啊&#xff0c;怎么办呐&#xff0c;烦死啦&#xff01; 其实…

记录一次内网渗透试验

0x00 前言 目标&#xff1a;给了一个目标机ip&#xff0c;要求得到该服务器权限&#xff0c;并通过该ip渗透至内网控制内网的两台服务器 攻击机&#xff1a;kali (192.168.31.51) 目标机&#xff1a;windows 2003 (192.168.31.196) 0x01 信息收集 nmap端口探测 御剑后台扫描 …

2018-2019 1 20165203 实验五 通用协议设计

2018-2019 1 20165203 实验五 通用协议设计 OpenSSL学习 定义&#xff1a;OpenSSL是为网络通信提供安全及数据完整性的一种安全协议&#xff0c;囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议&#xff0c;并提供了丰富的应用程序供测试或其它目的使用。基本功…

弄懂webpack,只要看这一片就够了(文末有福利)

什么是webpack ​ webpack是什么&#xff0c;官网中是这么说的。 ​ 本质上&#xff0c;webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时&#xff0c;它会递归地构建一个依赖关系图(dependency graph)&#xff0c;其中包…

beta冲刺总结那周余嘉熊掌将得队

作业格式 课程名称&#xff1a;软件工程1916|W&#xff08;福州大学&#xff09;作业要求&#xff1a;项目Beta冲刺团队名称&#xff1a; 那周余嘉熊掌将得队作业目标&#xff1a;beta冲刺总结队员学号队员姓名博客地址备注221600131Jaminhttps://www.cnblogs.com/JaminWu/队长…

在Winform中菜单动态添加“最近使用文件”

最近在做文件处理系统中&#xff0c;要把最近打开文件显示出来&#xff0c;方便用户使用。网上资料有说&#xff0c;去遍历“C:\Documents and Settings\Administrator\Recent”下的最近文档本。文主要介绍在Winform界面菜单中实现【最近使用的文件】动态菜单的处理&#xff0c…

Vue组件通信原理剖析(一)事件总线的基石 $on和$emit

首先我们先从一个面试题入手。 面试官问&#xff1a; “Vue中组件通信的常用方式有哪些&#xff1f;” 我答&#xff1a; 1. props 2. 自定义事件 3. eventbus 4. vuex 5. 还有常见的边界情况$parent、$children、$root、$refs、provide/inject 6. 此外还有一些非props特性$att…

display:flex弹性布局

一、背景 前段时间帮公司运维小姑娘调整她自己写的页面样式时发现她用了display: flex&#xff0c;我这个后端老古董还不太懂flex&#xff0c;自愧不如啊&#xff0c;所以写篇博客记录学习下。 现在写的前端页面还停留在依赖 display 属性 position属性 float属性的布局方式&…

Vue组件通信原理剖析(二)全局状态管理Vuex

首先我们先从一个面试题入手。 面试官问&#xff1a; “Vue中组件通信的常用方式有哪些&#xff1f;” 我答&#xff1a; 1. props 2. 自定义事件 3. eventbus 4. vuex 5. 还有常见的边界情况$parent、$children、$root、$refs、provide/inject 6. 此外还有一些非props特性$att…

初识单点登录及JWT实现

单点登录 多系统&#xff0c;单一位置登录&#xff0c;实现多系统同时登录的一种技术 &#xff08;三方登录&#xff1a;某系统使用其他系统的用户&#xff0c;实现本系统登录的方式。如微信登录、支付宝登录&#xff09; 单点登录一般是用于互相授信的系统&#xff0c;实现单一…

Vue组件通信原理剖析(三)provide/inject原理分析

首先我们先从一个面试题入手。 面试官问&#xff1a; “Vue中组件通信的常用方式有哪些&#xff1f;” 我答&#xff1a; 1. props 2. 自定义事件 3. eventbus 4. vuex 5. 还有常见的边界情况$parent、$children、$root、$refs、provide/inject 6. 此外还有一些非props特性$att…

iMX6开发板-uboot-网络设置和测试

本文章基于迅为IMX6开发板 将iMX6开发板通过网线连接到路由器&#xff0c;同时连接好调试串口&#xff0c;上电立即按 enter&#xff0c;即可进入 uboot。然后输入命令 pri&#xff0c;查看开发板当前的配置&#xff0c;如下图所示可以看到 ip 地址、子网掩码 等信息。 本文档测…

Django ajax 检测用户名是否已被注册

添加一个 register.html 页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <form><p>用户名<input id"username" type&…

详解JDBC连接数据库

一、概念 1. 为了能让程序操作数据库&#xff0c;对数据库中的表进行操作&#xff0c;每一种数据库都会提供一套连接和操作该数据库的驱动&#xff0c;而且每种数据库的驱动都各不相同&#xff0c;例如mysql数据库使用mysql驱动&#xff0c;oracle数据库使用oracle驱动&#xf…