`
zhpengfei0915
  • 浏览: 65958 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

利用swfupload实现java文件批量上传

 
阅读更多

之前在网上找过很多相关资料,很多所谓的批量上传都是忽悠人的,真正的批量上传指的是用户一次性可以选择多个文件,然后上传是将所有选取的文件上传到服务器。java中真正可以实现批量上传的技术大致有两种:一种是通过flash;一种是通过applet;不过html5也可以支持批量拖选。两种方式有各自的优缺点,其中flash对于浏览器兼容性较好,基本可以满足市面上大众浏览器,缺点就是对于上传文件大小有限制,如果用户只需要上传一些图片或者文档文件的话,这种选择还是比较理想的;applet方式可以上传大文件,但是需要浏览器支持jdk并安装相关插件。

今天这个项目采用的是flash方式。整体设计思路:采用ext+swfupload进行上传界面显示,后台采用strust2来处理上传文件。



最终项目运行效果图如下:



前台jsp文件源码index.jsp:

  1. <%@pagecontentType="text/html;charset=gb2312"language="java"%>
  2. <html>
  3. <head>
  4. <title>swf上传</title>
  5. <linkrel="stylesheet"type="text/css"
  6. href="js/css/ext-all.css"/>
  7. </head>
  8. <body>
  9. <scripttype="text/javascript"src="js/ext-base.js"></script>
  10. <scripttype="text/javascript"src="js/ext-all.js"></script>
  11. <scriptsrc="swf/swfupload.js"type="text/javascript"></script>
  12. <scriptsrc="swf/swfupload.speed.js"type="text/javascript"></script>
  13. <scriptsrc="swf/mode.js"type="text/javascript"></script>
  14. <scriptsrc="swf/handlers.js"type="text/javascript"></script>
  15. <scripttype="text/javascript"src="js/prototype/prototype.js"></script>
  16. <scripttype="text/javascript"src="js/bramus/jsProgressBarHandler.js"></script>
  17. <scripttype="text/javascript">
  18. //允许上传文件的全部大小
  19. varlimtallsize=50000000;
  20. functionUploadGrid()
  21. {
  22. varmine=this;
  23. varstates=[{v:-1,t:'等待'},{v:0,t:'就绪'},{v:1,t:'上传中'},{v:2,t:'停止'},{v:3,t:'成功'},{v:4,t:'失败'}];
  24. functionstatesRender(v)
  25. {
  26. for(vari=0;i<states.length;i++)
  27. {
  28. if(states[i].v==v)
  29. {
  30. returnstates[i].t;
  31. }
  32. }
  33. }
  34. functionrateRender(value,metaData,record,rowIndex,cellIndex,store)
  35. {
  36. v=value?value:0;
  37. //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>";
  38. //setProgress(v);
  39. return"<spanid=\"element6_"+record.data.id+"\"rate=\""+v+"\"></span>";
  40. }
  41. varrn=newExt.grid.RowNumberer();
  42. varsm=newExt.grid.CheckboxSelectionModel({singleSelect:false});
  43. varcm=newExt.grid.ColumnModel([
  44. rn,
  45. sm,
  46. {header:'文件名称',dataIndex:'fileName',menuDisabled:true,width:100},
  47. {header:'大小',dataIndex:'fileSize',menuDisabled:true,width:100},
  48. {header:'进度',dataIndex:'rate',menuDisabled:true,width:180,renderer:rateRender},
  49. {header:'速度',dataIndex:'speed',menuDisabled:true},
  50. {header:'状态',dataIndex:'state',menuDisabled:true,renderer:statesRender}
  51. ]);
  52. this.ds=newExt.data.Store({
  53. proxy:newExt.data.HttpProxy({url:'test!query.action',method:'post'}),
  54. remoteSort:false,
  55. reader:newExt.data.JsonReader(
  56. {totalProperty:'records',root:'root'},
  57. [
  58. {name:'id'},
  59. {name:'fileName'},
  60. {name:'code'},
  61. {name:'fileSize'},
  62. {name:'rate'},
  63. {name:'speed'},
  64. {name:'state'}
  65. ])
  66. });
  67. varRC=Ext.data.Record.create([
  68. {name:'id',mapping:'id'},
  69. {name:'code',mapping:'code'},
  70. {name:'fileName',mapping:'fileName'},
  71. {name:'fileSize',mapping:'fileSize'},
  72. {name:'rate',mapping:'rate'},
  73. {name:'speed',mapping:'speed'}
  74. ]);
  75. this.grid=newExt.grid.GridPanel({
  76. ds:mine.ds,
  77. cm:cm,
  78. sm:sm,
  79. anchor:'100%',
  80. loadMask:{msg:'数据加载中...'},
  81. viewConfig:{forceFit:true},
  82. height:300,
  83. width:600,
  84. tbar:[{id:'spanSWFUploadButton',text:'-'},'-'],
  85. listeners:{
  86. render:function()
  87. {
  88. //ytb-sep
  89. varcmp=Ext.getCmp("spanSWFUploadButton");
  90. varpcont=cmp.getEl().parent();
  91. pcont.update("<spanid='spanSWFUploadButton'class='blank'></span>");
  92. varswfu=newSWFUpload({
  93. upload_url:"upload.action",
  94. post_params:{
  95. "god":"god","uid":"u"
  96. },
  97. flash_url:"swf/swfupload.swf",
  98. button_placeholder_id:"spanSWFUploadButton",
  99. button_image_url:"swf/bt.png",
  100. button_text_right_padding:100,
  101. button_width:61,
  102. button_height:22,
  103. button_action:SWFUpload.BUTTON_ACTION.SELECT_FILES,
  104. //handlerhere
  105. swfupload_loaded_handler:Handlers.swfUploadLoaded,
  106. file_queued_handler:Handlers.fileQueued,
  107. file_queue_error_handler:Handlers.fileQueueError,
  108. upload_progress_handler:Handlers.uploadProgress,
  109. upload_error_handler:Handlers.uploadError,
  110. upload_success_handler:Handlers.uploadSuccess
  111. });
  112. swfu.grid=mine.grid;
  113. swfu.ds=mine.ds;
  114. swfu.RC=RC;
  115. }
  116. }
  117. });
  118. }
  119. Ext.onReady(function(){
  120. Ext.QuickTips.init();
  121. Ext.form.Field.prototype.msgTarget='side';
  122. Ext.BLANK_IMAGE_URL='../../images/s.gif';
  123. vargrid=newUploadGrid();
  124. varwin=newExt.Window({
  125. title:'上传表格测试',
  126. el:'panel',
  127. width:620,
  128. height:350,
  129. closeAction:'hide',//关闭窗口时渐渐缩小
  130. plain:true,
  131. items:[grid.grid],
  132. buttons:[{
  133. text:'Submit',
  134. disabled:true
  135. },{
  136. text:'Close',
  137. handler:function(){
  138. win.hide();
  139. }
  140. }]
  141. });
  142. win.show(this);
  143. })
  144. </script>
  145. <divid="panel"></div>
  146. </body>
  147. </html>

后台UploadAction.java:

  1. packageupload.action;
  2. importjava.io.File;
  3. importjava.text.DateFormat;
  4. importjava.text.SimpleDateFormat;
  5. importjava.util.Date;
  6. importorg.apache.struts2.ServletActionContext;
  7. publicclassUploadAction
  8. {
  9. privateFileFiledata;
  10. privateStringFiledataFileName;
  11. privateStringFiledataContentType;
  12. //文件夹目录
  13. privatestaticfinalStringbasePath="fileupload\\groupResource";
  14. publicStringexecute()
  15. {
  16. Strings=(String)ServletActionContext.getRequest().getParameter("god");
  17. Strings2=(String)ServletActionContext.getRequest().getParameter("uid");
  18. if(Filedata!=null&&Filedata.length()>0)
  19. {
  20. //群组名字作为最后的文件夹
  21. StringgroupFileName="haoba";
  22. StringuploadPath=ServletActionContext.getServletContext()
  23. .getRealPath(basePath+"\\"+groupFileName);
  24. Filepath=newFile(uploadPath);
  25. if(!path.exists())
  26. {
  27. path.mkdirs();
  28. }else{
  29. //文件已存在
  30. //FiledataFileName
  31. }
  32. StringnewPath=uploadPath+"\\"+FiledataFileName;
  33. Filedata.renameTo(newFile(newPath));
  34. //保存到数据库中的路径
  35. StringsavePath=basePath+"\\"+groupFileName+"\\"+FiledataFileName;
  36. }
  37. returnnull;
  38. }
  39. //上传文件
  40. privateStringpathSplit(StringtimeStr,Stringo,Stringn)
  41. {
  42. StringBuffersb=newStringBuffer();
  43. for(Stringa:timeStr.split(o))
  44. {
  45. sb.append(a);
  46. sb.append(n);
  47. }
  48. sb.deleteCharAt(sb.length()-1);
  49. returnsb.toString();
  50. }
  51. publicstaticStringformat(Datedate,Stringparttern)
  52. {
  53. DateFormatdf=newSimpleDateFormat(parttern);
  54. returndf.format(date);
  55. }
  56. publicFilegetFiledata()
  57. {
  58. returnFiledata;
  59. }
  60. publicvoidsetFiledata(Filefiledata)
  61. {
  62. Filedata=filedata;
  63. }
  64. publicStringgetFiledataFileName()
  65. {
  66. returnFiledataFileName;
  67. }
  68. publicvoidsetFiledataFileName(StringfiledataFileName)
  69. {
  70. FiledataFileName=filedataFileName;
  71. }
  72. publicStringgetFiledataContentType()
  73. {
  74. returnFiledataContentType;
  75. }
  76. publicvoidsetFiledataContentType(StringfiledataContentType)
  77. {
  78. FiledataContentType=filedataContentType;
  79. }
  80. publicstaticvoidmain(String[]args){
  81. System.out.println(0.444<1);
  82. }
  83. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics