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控件,不过这种解决方案也不适合进行多文件的提交,所以无伤大雅。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值