之前在网上找过很多相关资料,很多所谓的批量上传都是忽悠人的,真正的批量上传指的是用户一次性可以选择多个文件,然后上传是将所有选取的文件上传到服务器。java中真正可以实现批量上传的技术大致有两种:一种是通过flash;一种是通过applet;不过html5也可以支持批量拖选。两种方式有各自的优缺点,其中flash对于浏览器兼容性较好,基本可以满足市面上大众浏览器,缺点就是对于上传文件大小有限制,如果用户只需要上传一些图片或者文档文件的话,这种选择还是比较理想的;applet方式可以上传大文件,但是需要浏览器支持jdk并安装相关插件。
今天这个项目采用的是flash方式。整体设计思路:采用ext+swfupload进行上传界面显示,后台采用strust2来处理上传文件。
最终项目运行效果图如下:
前台jsp文件源码index.jsp:
-
<%@pagecontentType="text/html;charset=gb2312"language="java"%>
-
<html>
-
<head>
-
<title>swf上传</title>
-
<linkrel="stylesheet"type="text/css"
-
href="js/css/ext-all.css"/>
-
-
</head>
-
-
-
-
<body>
-
<scripttype="text/javascript"src="js/ext-base.js"></script>
-
<scripttype="text/javascript"src="js/ext-all.js"></script>
-
<scriptsrc="swf/swfupload.js"type="text/javascript"></script>
-
<scriptsrc="swf/swfupload.speed.js"type="text/javascript"></script>
-
<scriptsrc="swf/mode.js"type="text/javascript"></script>
-
<scriptsrc="swf/handlers.js"type="text/javascript"></script>
-
<scripttype="text/javascript"src="js/prototype/prototype.js"></script>
-
<scripttype="text/javascript"src="js/bramus/jsProgressBarHandler.js"></script>
-
<scripttype="text/javascript">
-
//允许上传文件的全部大小
-
varlimtallsize=50000000;
-
-
functionUploadGrid()
-
{
-
varmine=this;
-
varstates=[{v:-1,t:'等待'},{v:0,t:'就绪'},{v:1,t:'上传中'},{v:2,t:'停止'},{v:3,t:'成功'},{v:4,t:'失败'}];
-
functionstatesRender(v)
-
{
-
for(vari=0;i<states.length;i++)
-
{
-
if(states[i].v==v)
-
{
-
returnstates[i].t;
-
}
-
}
-
}
-
functionrateRender(value,metaData,record,rowIndex,cellIndex,store)
-
{
-
v=value?value:0;
-
//return"<tableborder='0'cellpadding='0'cellspacing='0'width='100%'height='100%'><tr><tdbgcolor='#0000FF'height='100%'align='center'width='"+v+"%'><fontcolor='white'>"+v+"%</font></td><td></td></tr></table>";
-
//setProgress(v);
-
return"<spanid=\"element6_"+record.data.id+"\"rate=\""+v+"\"></span>";
-
}
-
-
varrn=newExt.grid.RowNumberer();
-
varsm=newExt.grid.CheckboxSelectionModel({singleSelect:false});
-
varcm=newExt.grid.ColumnModel([
-
rn,
-
sm,
-
{header:'文件名称',dataIndex:'fileName',menuDisabled:true,width:100},
-
{header:'大小',dataIndex:'fileSize',menuDisabled:true,width:100},
-
{header:'进度',dataIndex:'rate',menuDisabled:true,width:180,renderer:rateRender},
-
{header:'速度',dataIndex:'speed',menuDisabled:true},
-
{header:'状态',dataIndex:'state',menuDisabled:true,renderer:statesRender}
-
]);
-
-
this.ds=newExt.data.Store({
-
proxy:newExt.data.HttpProxy({url:'test!query.action',method:'post'}),
-
remoteSort:false,
-
reader:newExt.data.JsonReader(
-
{totalProperty:'records',root:'root'},
-
[
-
{name:'id'},
-
{name:'fileName'},
-
{name:'code'},
-
{name:'fileSize'},
-
{name:'rate'},
-
{name:'speed'},
-
{name:'state'}
-
])
-
-
});
-
-
varRC=Ext.data.Record.create([
-
{name:'id',mapping:'id'},
-
{name:'code',mapping:'code'},
-
{name:'fileName',mapping:'fileName'},
-
{name:'fileSize',mapping:'fileSize'},
-
{name:'rate',mapping:'rate'},
-
{name:'speed',mapping:'speed'}
-
]);
-
-
this.grid=newExt.grid.GridPanel({
-
-
ds:mine.ds,
-
cm:cm,
-
sm:sm,
-
anchor:'100%',
-
loadMask:{msg:'数据加载中...'},
-
viewConfig:{forceFit:true},
-
height:300,
-
width:600,
-
tbar:[{id:'spanSWFUploadButton',text:'-'},'-'],
-
listeners:{
-
render:function()
-
{
-
//ytb-sep
-
varcmp=Ext.getCmp("spanSWFUploadButton");
-
varpcont=cmp.getEl().parent();
-
pcont.update("<spanid='spanSWFUploadButton'class='blank'></span>");
-
varswfu=newSWFUpload({
-
upload_url:"upload.action",
-
post_params:{
-
"god":"god","uid":"u"
-
},
-
-
flash_url:"swf/swfupload.swf",
-
button_placeholder_id:"spanSWFUploadButton",
-
button_image_url:"swf/bt.png",
-
button_text_right_padding:100,
-
button_width:61,
-
button_height:22,
-
-
button_action:SWFUpload.BUTTON_ACTION.SELECT_FILES,
-
//handlerhere
-
swfupload_loaded_handler:Handlers.swfUploadLoaded,
-
file_queued_handler:Handlers.fileQueued,
-
file_queue_error_handler:Handlers.fileQueueError,
-
upload_progress_handler:Handlers.uploadProgress,
-
upload_error_handler:Handlers.uploadError,
-
upload_success_handler:Handlers.uploadSuccess
-
});
-
swfu.grid=mine.grid;
-
swfu.ds=mine.ds;
-
swfu.RC=RC;
-
}
-
}
-
});
-
-
}
-
-
Ext.onReady(function(){
-
Ext.QuickTips.init();
-
Ext.form.Field.prototype.msgTarget='side';
-
Ext.BLANK_IMAGE_URL='../../images/s.gif';
-
vargrid=newUploadGrid();
-
varwin=newExt.Window({
-
title:'上传表格测试',
-
el:'panel',
-
width:620,
-
height:350,
-
closeAction:'hide',//关闭窗口时渐渐缩小
-
plain:true,
-
-
items:[grid.grid],
-
-
buttons:[{
-
text:'Submit',
-
disabled:true
-
},{
-
text:'Close',
-
handler:function(){
-
win.hide();
-
}
-
}]
-
});
-
win.show(this);
-
})
-
</script>
-
<divid="panel"></div>
-
</body>
-
</html>
后台UploadAction.java:
分享到:
相关推荐
部署后能够实现上传功能,值得参考。是java的struts2+spring..
SWFupload_文件批量上传,SWFupload_文件批量上传,SWFupload_文件批量上传,SWFupload_文件批量上传
SWFUpload批量大文件上传。后端PHP代码实现。采用HTTP协议。
选择批量文件,在上传前,用户还可删除其中几个不想上传的文件; 本控件是对swfUpload这个FLASH插件的二次包装,控件类对象中的一个内部元素即为一个SWFUpload对象,可对其中进行相应的操作(详见附送的SWFUpload V2_...
swfupload+fileupload文件批量上传,带进度条百分比显示,在eclipse中可以直接运行
SWFUpload实现多文件上传,servlet+jsp
swfupload实现多文件上传Demo,用servlet实现上传文件(SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统标签的文件...
NULL 博文链接:https://heisetoufa.iteye.com/blog/1933319
Ext+swfupload实现多文件上传(java版),是从MyEclipse工程中导出的war包,已通过测试,绝对能运行成功.
swfupload控件实现flash文件上传。详尽的参数介绍等!
完美运行,注释完整,兼容性好,新增删除功能,代码可直接使用无需修改!
asp.net利用swfupload批量上传.zip
SwfUpload 上传文件 java版DEMO SwfUpload 官网提供的demo都没有java版的,自己用的官网的页面写的一个。上传成功回传上传信息到页面。优化了官网的demo,增加删除附件下载附件。兼容ff chrome ie ,下载导入到...
swfupload很实用的java文件批量上传工具
web项目使用swfupload插件实现多文件上传,可以控制上传文件的格式和大小
java 批量 多文件 上传 SwfUpload插件兼容所有浏览器,火狐需要安装最新的flash reader,压缩包内有最新的flash reader,实例是上传多张图片,只需稍加修改可以上传任何格式的文件,很好看很好用,特意整理出来分享...
java 文件上传 SWFUPLOAD 多文件上传 异步上传。SWFUPLOAD 是基于flash插件的文件上传,有良好的显示效果。
swfupload多文件上传带进度条实例,vs2012开发,net4.0框架,可上传多个文件,上传类型、上传大小、上传数量可控,已测试成功!
研究了段时间java servlet做为后台处理的swfupload,其中解决了向后台传送数据、动态产生上传文件表格等功能,由于时间问题session问题未加入进去,可单独与我联系再详细解释。希望能给朋友们提供点帮助!