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" > </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.js插件, <script type="text/javascript" src="/js/easyui.js"> <script type="text/javascript" src="/js/easyui-lang-zh_CN.js"></script>
在本案例中,我们关注的是"jquery easyui pagination 分页插件扩展",这是一个用于增强默认分页功能的自定义插件。 分页在数据展示中扮演着重要的角色,特别是在处理大量数据时,它能让用户按需加载和浏览数据,...
标题中的“easyui+jquery插件+angularJS”揭示了这个压缩包可能包含的三个主要技术:EasyUI、jQuery插件以及AngularJS。这三种技术都是前端开发中的关键组件,分别对应于用户界面框架、JavaScript库和单页应用框架。...
在本篇文章中,我们将深入探讨 EasyUI 的模态窗口插件,包括其基本使用方法、配置选项以及如何实现局部模态效果。 首先,让我们了解什么是模态窗口。模态窗口是一种阻止用户与主页面交互,直到关闭该窗口为止的窗口...
jquery easyui的压缩包,以及easyui的一些拓展插件包,包括Portal(制作图表、列表、球形图等),数据网格视图(DataGrid View),可编辑的数据网格(Editable DataGrid),表格编辑单元格(Cell Editing in ...
9. **插件**:`plugins` 文件夹可能包含了一些额外的扩展插件,这些插件可能不是EasyUI的标准组件,但可以增强EasyUI的功能。 总结来说,这个压缩包提供的EasyUI 1.7.0源码对于开发者来说是一个宝贵的资源,不仅...
7. **插件扩展**:除了内置组件,jQuery EasyUI 还允许开发人员创建自定义插件,以满足特定项目的需求。社区也提供了许多第三方插件,增强了框架的功能。 8. **版本更新与维护**:jQuery EasyUI 持续更新,修复已知...
在"EasyUI图表插件Highcharts源码Demo(Java)"中,你可以学习如何在Java环境下集成和使用Highcharts。首先,你需要在项目中引入Highcharts的相关库文件,包括JavaScript和CSS文件。这些文件通常会被包含在HTML模板中...
在EasyUI的众多组件中,`validatebox` 是一个非常实用的验证插件,主要用于表单验证,确保用户输入的数据符合预设的规则和格式。通过使用`validatebox`,开发者可以轻松实现各种常见的验证需求,如用户名、密码、...
Plupload和EasyUI是两个非常流行的JavaScript库,用于在Web应用程序中实现文件上传功能。Plupload是一个强大的多浏览器、多模式的文件上传组件,而EasyUI则是一个基于jQuery的UI框架,提供了丰富的用户界面组件。将...
在EasyUI中实现文件上传,通常会结合使用第三方库Plupload。 Plupload是一个强大的多浏览器文件上传解决方案,支持多种上传方式,包括传统的表单提交、Flash、Silverlight和HTML5。它的主要特点包括分块上传、断点...
本文将详细探讨如何将一个名为`jquery.stickynote.js`的便签插件与流行的前端框架EasyUI相结合,以增强用户界面的互动性和功能性。 `jquery.stickynote.js`是一个轻量级的插件,它允许用户在网页上创建可粘贴、可...
easyui分页插件,分页插件传递查询参数,和返回之后执行的方法
这个基于EasyUI的多人选择插件正是为了提升用户体验而设计的。EasyUI是一个轻量级的JavaScript库,它基于jQuery,提供了丰富的组件和易于使用的API,使得开发者能够快速构建美观的、功能齐全的前端界面。 标题中的...
在这个"**MVC与EASYUI结合使用实例**"中,我们将会看到如何在MVC框架下利用EasyUI的组件来增强用户体验。特别是**datagrid**,它是一个强大的表格展示和管理组件,可以用来显示和编辑大量的结构化数据。 1. **...
easyui-datagrid导出至Excel插件,中文没有乱码问题。
特别是在结合AjaxFileUpload包的情况下,如何实现文件的异步上传,并对EasyUI与AjaxFileUpload的源码进行必要的修改以支持这一功能。以下将详细介绍`filebox`控件的使用方法、注意事项以及具体的代码实现。 #### 二...
这个压缩包包含了 EasyUI 1.6.0 版本的所有插件源码,这意味着我们可以深入理解其内部工作原理,并可以根据项目需求进行定制化开发。 在 EasyUI 1.6.0 版本中,包含了一系列的组件和插件,这些组件覆盖了网页应用的...