<%@taglibprefix="s"uri="/struts-tags"%>

JS+Struts2多文件上传完整示例

系统 1864 0
1、JSP页面:
JS控制增加删除多个上传文件框,代码如下:
Java代码
  1. <%@pagelanguage= "java" pageEncoding= "UTF-8" %>
  2. <%@taglibprefix= "s" uri= "/struts-tags" %>
  3. <!DOCTYPEhtmlPUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
  4. <htmlxmlns= "http://www.w3.org/1999/xhtml" >
  5. <head>
  6. <% @include file= "../../_head.html" %>
  7. <title> 文件上传 </title>
  8. <metahttp-equiv= "pragma" content= "no-cache" >
  9. <metahttp-equiv= "cache-control" content= "no-cache" >
  10. <metahttp-equiv= "expires" content= "0" >
  11. <scriptlanguage= "javascript" type= "text/javascript"
  12. src= "../js/common/common.js" ></script>
  13. <scripttype= "text/javascript" >
  14. varpos= 1 ;
  15. functionaddFileComponent(){
  16. varelTable=document.getElementById( 'uploadTable' ).getElementsByTagName( 'tbody' )[ 0 ];
  17. varelTr=document.getElementById( 'fileTr' );
  18. varelTr2=document.getElementById( 'op' );
  19. varnewEleTr=elTr.cloneNode( true );
  20. newEleTr.id= "fileTr" +pos;
  21. newEleTr.style.display= "" ;
  22. inputs=newEleTr.getElementsByTagName( 'input' );
  23. inputs[ 0 ].id= "file" +pos;
  24. varelInput=inputs[ 1 ];
  25. elInput.onclick=delFileComponent;
  26. elInput.id= "delbutton" +pos++;
  27. elTable.insertBefore(newEleTr,elTr2);
  28. }
  29. functiondelFileComponent(){
  30. varelTable=document.getElementById( 'uploadTable' ).getElementsByTagName( 'tbody' )[ 0 ];
  31. vartrArr=elTable.getElementsByTagName( "tr" );
  32. varel=event.srcElement;
  33. for (j= 0 ;j<trArr.length;j++){
  34. tr=trArr[j];
  35. if (tr.getElementsByTagName( "input" )[ 1 ]==el){
  36. elTable.removeChild(tr);
  37. pos--;
  38. break ;
  39. }
  40. }
  41. }
  42. functionisValidateFile(obj){
  43. varextend=obj.value.substring(obj.value.lastIndexOf( "." )+ 1 );
  44. if (extend== "" ){
  45. } else {
  46. if (!(extend== "xls" ||extend== "doc" )){
  47. alert( "请上传后缀名为xls或doc的文件!" );
  48. varnf=obj.cloneNode( true );
  49. nf.value= '' ;
  50. obj.parentNode.replaceChild(nf,obj);
  51. return false ;
  52. }
  53. }
  54. return true ;
  55. }
  56. </script>
  57. </head>
  58. <body>
  59. <%@includefile= "/common/message.jsp" %>
  60. <div class = "body-box" >
  61. <div class = "rhead" >
  62. <div class = "rpos" >
  63. 文件上传 (可同时上传多份文件)
  64. </div>
  65. <div class = "clear" ></div>
  66. </div>
  67. <s:formid= "ops" action= "csc_mUploadFile" theme= "simple"
  68. cssClass= "rhead" enctype= "multipart/form-data" >
  69. <tableid= "uploadTable" width= "100%" border= "0" >
  70. <tr>
  71. <td>
  72. <inputtype= "file" id= "file0" name= "uploadFile" size= "50"
  73. onchange= "isValidateFile(this);" />
  74. </td>
  75. </tr>
  76. <trid= "fileTr" style= "display:none;" >
  77. <td>
  78. <inputtype= "file" size= "50" name= "uploadFile"
  79. onchange= "isValidateFile(this);" />
  80. &nbsp;
  81. <inputtype= "button" value= "删除" />
  82. </td>
  83. </tr>
  84. <trid= "op" >
  85. <td>
  86. <inputtype= "submit" id= "uploadbutton" value= "上传" />
  87. &nbsp;
  88. <inputtype= "button" value= "添加" id= "addbutton"
  89. onClick= "addFileComponent();" />
  90. &nbsp;
  91. </td>
  92. </tr>
  93. </table>
  94. </s:form>
  95. <table class = "pn-ltable" width= "100%" cellspacing= "1" cellpadding= "0"
  96. border= "0" >
  97. <thead class = "pn-lthead" >
  98. <tr>
  99. <th>
  100. 序号
  101. </th>
  102. <th>
  103. 文件名
  104. </th>
  105. <th>
  106. 上传时间
  107. </th>
  108. </tr>
  109. </thead>
  110. <tbody class = "pn-ltbody" >
  111. <tronmouseover= "Pn.LTable.lineOver(this);"
  112. onmouseout= "Pn.LTable.lineOut(this);"
  113. onclick= "Pn.LTable.lineSelect(this);" >
  114. <td>
  115. </td>
  116. <td>
  117. </td>
  118. <td>
  119. </td>
  120. </tr>
  121. </tbody>
  122. </table>
  123. </div>
  124. </body>
  125. </html>


2、Action后台处理上传文件:
Java代码
  1. //uploadFile对应页面<inputtype="file"name="uploadFile">
  2. private List<File>uploadFile;
  3. //文件名对应uploadFile+“FileName”,要不获取不到文件名
  4. private List<String>uploadFileFileName;
  5. // 文件上传
  6. public StringmUploadFile(){
  7. if ( null ==uploadFile){
  8. this .addActionError( "请上传文件!" );
  9. } else {
  10. StringfileName= "" ;
  11. try {
  12. //在自己代码中控制 文件上传 的服务器目录
  13. Stringdirectory=ServletActionContext.getServletContext().getRealPath( "/uploads" );
  14. //判断该目录是否存在,不存在则创建
  15. FileUtil.makeDir(directory);
  16. //循环处理上传的文件
  17. for ( int i= 0 ,j=uploadFile.size();i<j;i++){
  18. fileName=uploadFileFileName.get(i);
  19. StringfilePath=directory+File.separator+fileName;
  20. FileUtil.uploadFile(uploadFile.get(i), new File(filePath));
  21. }
  22. } catch (IOExceptione){
  23. this .addActionMessage( "" );
  24. }
  25. this .addActionMessage( " 文件上传 成功!" );
  26. }
  27. return "fileUpload" ;
  28. }

FileUtil代码如下:
Java代码
  1. public class FileUtil{
  2. private static final int BUFFER_SIZE= 16 * 1024 ;
  3. public static void uploadFile(Filesrc,Filedst) throws IOException{
  4. InputStreamin= null ;
  5. OutputStreamout= null ;
  6. try {
  7. in= new BufferedInputStream( new FileInputStream(src),BUFFER_SIZE);
  8. out= new BufferedOutputStream( new FileOutputStream(dst),
  9. BUFFER_SIZE);
  10. byte []buffer= new byte [BUFFER_SIZE];
  11. while (in.read(buffer)> 0 ){
  12. out.write(buffer);
  13. }
  14. } finally {
  15. if ( null !=in){
  16. in.close();
  17. }
  18. if ( null !=out){
  19. out.close();
  20. }
  21. }
  22. }
  23. public static StringgetExtention(StringfileName){
  24. int pos=fileName.lastIndexOf( "." );
  25. return fileName.substring(pos);
  26. }
  27. public static void makeDir(Stringdirectory){
  28. Filedir= new File(directory);
  29. if (!dir.isDirectory()){
  30. dir.mkdirs();
  31. }
  32. }
  33. public static StringgenerateFileName(StringfileName)
  34. throws UnsupportedEncodingException{
  35. DateFormatformat= new SimpleDateFormat( "yyMMddHHmmss" );
  36. StringformatDate=format.format( new Date());
  37. Stringextension=fileName.substring(fileName.lastIndexOf( "." ));
  38. fileName= new String(fileName.getBytes( "iso8859-1" ), "gb2312" );
  39. return fileName+ "_" +formatDate+ new Random().nextInt( 10000 )
  40. +extension;
  41. }
  42. }



扩展:
1.可以实现带进度条的上传与下载;
2.可以用xml文件记录上传的文件清单,并且可以根据页面对上传文件的操作来修改相应的xml文件;

JS+Struts2多文件上传完整示例


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论