博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP通过隐藏iframe实现异步上传
阅读量:6452 次
发布时间:2019-06-23

本文共 2138 字,大约阅读时间需要 7 分钟。

之前在做JSP上传文件到服务器的时候,由于没有采用JQuery,而又必须得到上传文件到服务器后返回的文件id等信息。这一个过程就是出现上传的进度条,上传成功后进度条小时,并显示文件的详细内容,是异步的。没有使用插件的话,这一效果将很难实现。

于是可以通过隐藏iframe实现异步上传并得到返回信息的效果,实现原理如下:

 

 
  1. XML/HTML 代码复制内容到剪贴板  
  2.       
  3. <form action="/uploadAttaches.do" method="post" enctype="multipart/form-data" target="uploadIframe">        
  4.     添加附件:<input type="file" name="upload"/>        
  5.     <input type="submit" value="上传"/><br>        
  6.     <span id="msg"></span>        
  7. </form>        
  8. <iframe name="uploadIframe" id="uploadIframe" style="display:none"></iframe>    

需要注意的是form里面的target要与iframe里面的id的值相等,指示是form相应了post事件,也就是post时间相应的时候刷新的是iframe而不是整个页面。

 

 
  1. JavaScript 代码复制内容到剪贴板  
  2.       
  3. <script type="text/javascript">          
  4.     function callback(msg){          
  5.          document.getElementById("msg").innerHTML = msg;            
  6.          document.getElementById("path").value=msg;          
  7.     }          
  8. </script>      

下面是上传到服务器并返回信息的代码:

 

 
  1. Java 代码复制内容到剪贴板  
  2.       
  3.     String fileName = "";  //上传文件的文件名        
  4.     File tmpDir = new File("d:\\temp");        
  5.     String file = "";   //文件的生成路径名        
  6.     String showFileName = null;  //显示的文件名        
  7.     String showImageUrl = "";  //上传文件的图标路径        
  8.     try{        
  9.         if (ServletFileUpload.isMultipartContent(request)){        
  10.             DiskFileItemFactory factory = new DiskFileItemFactory();        
  11.             factory.setSizeThreshold(1 * 1024 * 1024);        
  12.             factory.setRepository(tmpDir);        
  13.             ServletFileUpload sfu = new ServletFileUpload(factory);        
  14.             sfu.setFileSizeMax(20 * 1024 * 1024);        
  15.             sfu.setSizeMax(20 * 1024 * 1024);        
  16.             sfu.setHeaderEncoding("UTF-8");        
  17.             FileItemIterator fii = sfu.getItemIterator(request);        
  18.             String uploadPath = getServletContext().getRealPath("/") + "upload";//获取文件路径          
  19.             System.out.println(uploadPath);        
  20.                     
  21.             if (!new File(uploadPath).isDirectory()) {        
  22.                 new File(uploadPath).mkdirs();        
  23.             }        
  24.             while(fii.hasNext()){        
  25.                 FileItemStream fis = fii.next();        
  26.                 if(!fis .isFormField() && fis.getName().length() > 0){        
  27.                     fileName = fis.getName();        
  28.                     BufferedInputStream in = new BufferedInputStream(fis.openStream());        
  29.                     BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(new File(uploadPath + File.separator + fileName)));        
  30.                     Streams.copy(in, os, true);        
  31.                     in.close();        
  32.                     os.close();        
  33.                     file = "upload/" + fileName;        
  34.                 }        
  35.             }        
  36.         }        
  37.         response.getWriter().write("<script>parent.callback('"+file+"')</script>");        
  38.     }catch (Exception e) {        
  39.         e.printStackTrace();        
  40.     }    

 

     本文转自06peng 51CTO博客,原文链接:http://blog.51cto.com/06peng/962797,如需转载请自行联系原作者

你可能感兴趣的文章
HDOJ5015 233 Matrix(矩阵乘法加速递推)
查看>>
三种局域网扫描工具比较
查看>>
移动铁通宽带上网设置教程
查看>>
java中判断字符串中是否有中文字符
查看>>
Python算法(含源代码下载)
查看>>
利用Windows自带的Certutil查看文件MD5
查看>>
Git处理 行结束符
查看>>
通过原生js添加div和css
查看>>
[训练日志] 7月13日
查看>>
Python 模块 和 包
查看>>
简单的导出表格和将表格下载到桌面上。
查看>>
《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立
查看>>
递归查询上一级
查看>>
JAVA - 大数类详解
查看>>
查询指定名称的文件
查看>>
批处理文件
查看>>
1.每次按一下pushbutton控件,切换图片?
查看>>
Python 嵌套列表解析
查看>>
[GXOI/GZOI2019]旧词——树链剖分+线段树
查看>>
android 补间动画的实现
查看>>