`

Easyui 结合Pluplaod插件的上传

阅读更多

点击查看原图

 

UploaderServlet.java

001 package gson.demo;
002  
003 /**
004  * @author ____′↘夏悸
005  * <a href="http://bbs.btboys.com/">Easyui 中文社区</a>
006  * <a href="http://easyui.btboys.com/">Easyui 学习班</a>
007  */
008 import java.io.BufferedOutputStream;
009 import java.io.File;
010 import java.io.FileOutputStream;
011 import java.io.IOException;
012 import java.util.List;
013 import java.util.UUID;
014  
015 import javax.servlet.ServletConfig;
016 import javax.servlet.ServletException;
017 import javax.servlet.http.HttpServlet;
018 import javax.servlet.http.HttpServletRequest;
019 import javax.servlet.http.HttpServletResponse;
020  
021 import org.apache.commons.fileupload.FileItem;
022 import org.apache.commons.fileupload.FileUploadException;
023 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
024 import org.apache.commons.fileupload.servlet.ServletFileUpload;
025 import org.apache.commons.io.FileUtils;
026 import org.apache.commons.io.FilenameUtils;
027  
028 public class UploaderServlet extends HttpServlet {
029  
030     private static final long serialVersionUID = 1L;
031     String repositoryPath;
032     String uploadPath;
033  
034     @SuppressWarnings("unchecked")
035     public void doPost(HttpServletRequest request, HttpServletResponse response)
036             throws ServletException, IOException {
037         response.setCharacterEncoding("UTF-8");
038         Integer schunk = null;//分割块数
039         Integer schunks = null;//总分割数
040         String name = null;//文件名
041         BufferedOutputStream outputStream=null;
042         if (ServletFileUpload.isMultipartContent(request)) {
043             try {
044                 DiskFileItemFactory factory = new DiskFileItemFactory();
045                 factory.setSizeThreshold(1024);
046                 factory.setRepository(new File(repositoryPath));//设置临时目录
047                 ServletFileUpload upload = new ServletFileUpload(factory);
048                 upload.setHeaderEncoding("UTF-8");
049                 upload.setSizeMax(5 1024 1024);//设置附近大小
050                 List<FileItem> items = upload.parseRequest(request);
051                 //生成新文件名
052                 String newFileName = null;
053                 for (FileItem item : items) {
054                     if (!item.isFormField()) {// 如果是文件类型
055                         name = item.getName();// 获得文件名
056                         newFileName = UUID.randomUUID().toString().replace("-","").concat(".").concat(FilenameUtils.getExtension(name));
057                         if (name != null) {
058                             String nFname = newFileName;
059                             if (schunk != null) {
060                                 nFname = schunk + "_" + name;
061                             }
062                             File savedFile = new File(uploadPath, nFname);
063                             item.write(savedFile);
064                         }
065                     else {
066                         //判断是否带分割信息
067                         if (item.getFieldName().equals("chunk")) {
068                             schunk = Integer.parseInt(item.getString());
069                         }
070                         if (item.getFieldName().equals("chunks")) {
071                             schunks = Integer.parseInt(item.getString());
072                         }
073                     }
074                 }
075                  
076                 if (schunk != null && schunk + 1 == schunks) {
077                     outputStream = new BufferedOutputStream(new FileOutputStream(new File(uploadPath, newFileName)));
078                     //遍历文件合并
079                     for (int i = 0; i < schunks; i++) {
080                         File tempFile=new File(uploadPath,i+"_"+name);
081                         byte[] bytes=FileUtils.readFileToByteArray(tempFile); 
082                         outputStream.write(bytes);
083                         outputStream.flush();
084                         tempFile.delete();
085                     }
086                     outputStream.flush();
087                 }
088                 response.getWriter().write("{\"status\":true,\"newName\":\""+newFileName+"\"}");
089             catch (FileUploadException e) {
090                 e.printStackTrace();
091                 response.getWriter().write("{\"status\":false}");
092             catch (Exception e) {
093                 e.printStackTrace();
094                 response.getWriter().write("{\"status\":false}");
095             }finally
096                 try 
097                     if(outputStream!=null)
098                         outputStream.close(); 
099                 catch (IOException e) { 
100                     e.printStackTrace(); 
101                 
102             }  
103         }
104     }
105  
106     @Override
107     public void init(ServletConfig config) throws ServletException {
108         repositoryPath = FileUtils.getTempDirectoryPath();
109         uploadPath = config.getServletContext().getRealPath(config.getInitParameter("uploadPath"));
110         File up = new File(uploadPath);
111         if(!up.exists()){
112             up.mkdir();
113         }
114     }
115 }

 web.xml

 

01 <servlet>
02     <servlet-name>Uploader</servlet-name>
03     <servlet-class>gson.demo.UploaderServlet</servlet-class>
04     <init-param>
05         <param-name>uploadPath</param-name>
06         <param-value>/WEB-INF/upload</param-value>
07     </init-param>
08   </servlet>
09  
10   <servlet-mapping>
11     <servlet-name>Uploader</servlet-name>
12     <url-pattern>/uploader</url-pattern>
13   </servlet-mapping>

 

 

 

 

index.jsp

 

01 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
02 <%
03     String path = request.getContextPath();
04     String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
05 %>
06  
07 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
08 <html>
09 <head>
10 <base href="<%=basePath%>">
11 <title>GodSon Easyui 结合Pluplaod插件的上传演示</title>
12 <link rel="stylesheet" href="bootstrap/easyui.css" type="text/css"></link>
13 <script type="text/javascript" src="jquery-1.8.0.min.js"></script>
14 <script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
15 <script type="text/javascript">
16 /**
17  * 创建上传窗口 公共方法
18  * @param chunk 是否分割大文件
19  * @param callBack 上传成功之后的回调
20  */
21 function Uploader(chunk,callBack){
22     var addWin = $('<div style="overflow: hidden;"/>');
23     var upladoer = $('<iframe/>');
24     upladoer.attr({'src':'<%=basePath%>/uploader.jsp?chunk='+chunk,width:'100%',height:'100%',frameborder:'0',scrolling:'no'});
25     addWin.window({
26         title:"上传文件",
27         height:350,
28         width:550,
29         minimizable:false,
30         modal:true,
31         collapsible:false,
32         maximizable:false,
33         resizable:false,
34         content:upladoer,
35         onClose:function(){
36             var fw = GetFrameWindow(upladoer[0]);
37             var files = fw.files;
38             $(this).window('destroy');
39             callBack.call(this,files);
40         },
41         onOpen:function(){
42             var target = $(this);
43             setTimeout(function(){
44                 var fw = GetFrameWindow(upladoer[0]);
45                 fw.target = target;
46             },100);
47         }
48     });
49 }
50  
51 /**
52  * 根据iframe对象获取iframe的window对象
53  * @param frame
54  * @returns {Boolean}
55  */
56 function GetFrameWindow(frame){
57     return frame && typeof(frame)=='object' && frame.tagName == 'IFRAME' && frame.contentWindow;
58 }
59   
60 function makerUpload(chunk){
61  Uploader(chunk,function(files){
62      if(files && files.length>0){
63          $("#res").text("成功上传:"+files.join(","));
64      }
65  });
66 }
67 </script>
68 </head>
69 <body style="width: 100%;height: 100%;overflow:hidden;margin: 0;padding: 0;">
70     <h1>GodSon Easyui 结合Pluplaod插件的上传演示</h1>
71     <hr/>
72     <a class="easyui-linkbutton" href="javascript:makerUpload(false)">不分割文件上传</a> <a class="easyui-linkbutton" href="javascript:makerUpload(true)">分割文件上传</a>
73     <hr/>
74     <div id="res"></div>
75 </body>
76 </html>

 

 

upload.jsp

 

 

01 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
02 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
03 <html>
04   <head>
05     <title>文件上传</title>
06     <link rel="stylesheet" href="plupload/queue/css/jquery.plupload.queue.css" type="text/css"></link>
07     <script type="text/javascript" src="jquery-1.8.0.min.js"></script>
08     <script type="text/javascript" src="plupload/plupload.js"></script>
09     <script type="text/javascript" src="plupload/plupload.html4.js"></script>
10     <script type="text/javascript" src="plupload/plupload.html5.js"></script>
11     <script type="text/javascript" src="plupload/plupload.flash.js"></script>
12     <script type="text/javascript" src="plupload/zh_CN.js"></script>
13     <script type="text/javascript" src="plupload/queue/jquery.plupload.queue.js"></script>
14   <body style="padding: 0;margin: 0;">
15     <div id="uploader">&nbsp;</div>
16 <script type="text/javascript">
17 var files = [];
18 var errors = [];
19 var type = 'file';
20 var chunk = eval('${param.chunk}');
21 var max_file_size = '5mb';
22 var filters = {title : "文档", extensions : "zip,doc,docx,xls,xlsx,ppt,pptx"};
23 $("#uploader").pluploadQueue($.extend({
24     runtimes : 'flash,html4,html5',
25     url : 'uploader',
26     max_file_size : max_file_size,
27     file_data_name:'file',
28     unique_names:true,
29     filters : [filters],
30     flash_swf_url : 'plupload/plupload.flash.swf',
31     init:{
32         FileUploaded:function(uploader,file,response){
33             if(response.response){
34                 var rs = $.parseJSON(response.response);
35                 if(rs.status){
36                     files.push(file.name);
37                 }else{
38                     errors.push(file.name);
39                 }
40             }
41         },
42         UploadComplete:function(uploader,fs){
43             var e= errors.length ? ",失败"+errors.length+"个("+errors.join("、")+")。" "。";
44             alert("上传完成!共"+fs.length+"个。成功"+files.length+e);
45             target.window("close");
46         }
47     }
48 },(chunk ? {chunk_size:'1mb'} : {})));
49 </script>
50   </body>
51 </html>

 

分享到:
评论

相关推荐

    easyui插件

    easyui.js插件, &lt;script type="text/javascript" src="/js/easyui.js"&gt; &lt;script type="text/javascript" src="/js/easyui-lang-zh_CN.js"&gt;&lt;/script&gt;

    jquery easyui pagination 分页插件扩展

    在本案例中,我们关注的是"jquery easyui pagination 分页插件扩展",这是一个用于增强默认分页功能的自定义插件。 分页在数据展示中扮演着重要的角色,特别是在处理大量数据时,它能让用户按需加载和浏览数据,...

    easyui+jquery插件+angularJS

    标题中的“easyui+jquery插件+angularJS”揭示了这个压缩包可能包含的三个主要技术:EasyUI、jQuery插件以及AngularJS。这三种技术都是前端开发中的关键组件,分别对应于用户界面框架、JavaScript库和单页应用框架。...

    easyui 模态窗口插件

    在本篇文章中,我们将深入探讨 EasyUI 的模态窗口插件,包括其基本使用方法、配置选项以及如何实现局部模态效果。 首先,让我们了解什么是模态窗口。模态窗口是一种阻止用户与主页面交互,直到关闭该窗口为止的窗口...

    JQueryEasyUI以及easyui拓展插件.zip

    jquery easyui的压缩包,以及easyui的一些拓展插件包,包括Portal(制作图表、列表、球形图等),数据网格视图(DataGrid View),可编辑的数据网格(Editable DataGrid),表格编辑单元格(Cell Editing in ...

    easyui 1.7.0 所有插件源码,购买于官方

    9. **插件**:`plugins` 文件夹可能包含了一些额外的扩展插件,这些插件可能不是EasyUI的标准组件,但可以增强EasyUI的功能。 总结来说,这个压缩包提供的EasyUI 1.7.0源码对于开发者来说是一个宝贵的资源,不仅...

    jquery-easyui jquery插件

    7. **插件扩展**:除了内置组件,jQuery EasyUI 还允许开发人员创建自定义插件,以满足特定项目的需求。社区也提供了许多第三方插件,增强了框架的功能。 8. **版本更新与维护**:jQuery EasyUI 持续更新,修复已知...

    EasyUI图表插件Highcharts源码Demo(Java)

    在"EasyUI图表插件Highcharts源码Demo(Java)"中,你可以学习如何在Java环境下集成和使用Highcharts。首先,你需要在项目中引入Highcharts的相关库文件,包括JavaScript和CSS文件。这些文件通常会被包含在HTML模板中...

    EasyUi_validatebox 验证插件

    在EasyUI的众多组件中,`validatebox` 是一个非常实用的验证插件,主要用于表单验证,确保用户输入的数据符合预设的规则和格式。通过使用`validatebox`,开发者可以轻松实现各种常见的验证需求,如用户名、密码、...

    plupload 结合easyui 上传文件

    Plupload和EasyUI是两个非常流行的JavaScript库,用于在Web应用程序中实现文件上传功能。Plupload是一个强大的多浏览器、多模式的文件上传组件,而EasyUI则是一个基于jQuery的UI框架,提供了丰富的用户界面组件。将...

    easyUI文件上传

    在EasyUI中实现文件上传,通常会结合使用第三方库Plupload。 Plupload是一个强大的多浏览器文件上传解决方案,支持多种上传方式,包括传统的表单提交、Flash、Silverlight和HTML5。它的主要特点包括分块上传、断点...

    [jQuery] 修改jquery.stickynote.js[便签插件]与easyui结合

    本文将详细探讨如何将一个名为`jquery.stickynote.js`的便签插件与流行的前端框架EasyUI相结合,以增强用户界面的互动性和功能性。 `jquery.stickynote.js`是一个轻量级的插件,它允许用户在网页上创建可粘贴、可...

    easyui 分页插件

    easyui分页插件,分页插件传递查询参数,和返回之后执行的方法

    一个基于easyui的多人选择插件

    这个基于EasyUI的多人选择插件正是为了提升用户体验而设计的。EasyUI是一个轻量级的JavaScript库,它基于jQuery,提供了丰富的组件和易于使用的API,使得开发者能够快速构建美观的、功能齐全的前端界面。 标题中的...

    MVC与EASYUI结合使用实例

    在这个"**MVC与EASYUI结合使用实例**"中,我们将会看到如何在MVC框架下利用EasyUI的组件来增强用户体验。特别是**datagrid**,它是一个强大的表格展示和管理组件,可以用来显示和编辑大量的结构化数据。 1. **...

    easyui-datagrid导出至Excel插件

    easyui-datagrid导出至Excel插件,中文没有乱码问题。

    EasyUI filebox空间上传文件操作说明

    特别是在结合AjaxFileUpload包的情况下,如何实现文件的异步上传,并对EasyUI与AjaxFileUpload的源码进行必要的修改以支持这一功能。以下将详细介绍`filebox`控件的使用方法、注意事项以及具体的代码实现。 #### 二...

    easyui 1.6.0 所有插件源码,官网购买

    这个压缩包包含了 EasyUI 1.6.0 版本的所有插件源码,这意味着我们可以深入理解其内部工作原理,并可以根据项目需求进行定制化开发。 在 EasyUI 1.6.0 版本中,包含了一系列的组件和插件,这些组件覆盖了网页应用的...

Global site tag (gtag.js) - Google Analytics