struts2做上传多个文件

来源:互联网 发布:海智网聚网络 编辑:程序博客网 时间:2024/06/06 19:55

package com.zdfd.elec.action.upload;

import java.io.File;
import java.io.PrintWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.abin.core.service.GenericService;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.Preparable;
import com.zdfd.elec.action.BaseAction;
import com.zdfd.elec.upload.UploadFile;
import com.zdfd.elec.upload.UploadManager;

@InterceptorRefs(value = { @InterceptorRef("myFileUploadStack")})
@Result(name="download",location="/download/download.jsp")
@SuppressWarnings("unchecked")
public class UploadAction extends BaseAction implements Preparable {

 private static final long serialVersionUID = 1L;

 private UploadManager uploadManager;
 private GenericService genericService;
 private int newGroupId;
 private File[] upload;
 private String[] uploadFileName;
 String groupId = null;

 public UploadManager getUploadManager() {
  return uploadManager;
 }

 public void setUploadManager(UploadManager uploadManager) {
  this.uploadManager = uploadManager;
 }

 /**
  * 上传文件
  * @return
  * @throws Exception
  */
 public String doUpload() throws Exception {
  String groupId = ServletActionContext.getRequest().getParameter("id");
  String flag = groupId;
  try {
   if (upload != null) {
    for (int i = 0; i < upload.length; i++) {
     File file = uploadManager.uploadFile(upload[i],uploadFileName[i]);
     UploadFile uploadFile = new UploadFile();
     uploadFile.setFileName(file.getName());
     uploadFile.setRealName(uploadFileName[i]);
     uploadFile.setSavePath(file.getAbsolutePath());
     uploadFile.setUploadTime(new Date());
     if ("".equals(groupId) || groupId==null) {
      groupId = newGroupId + "";
     }
     uploadFile.setGroupId(Integer.valueOf(groupId));
     String extName = getExt(uploadFileName[i]);
     if (extName!=null && !"".equalsIgnoreCase(extName)) {
      if (".doc".equalsIgnoreCase(extName)) {
       uploadFile.setIcon("/images/doc.gif");
      } else if(".txt".equalsIgnoreCase(extName)) {
       uploadFile.setIcon("/images/txt.gif");
      } else if(".rar".equalsIgnoreCase(extName) || ".zip".equalsIgnoreCase(extName)) {
       uploadFile.setIcon("/images/rar.gif");
      } else if(".ppt".equalsIgnoreCase(extName)) {
       uploadFile.setIcon("/images/ppt.gif");
      } else if(".pdf".equalsIgnoreCase(extName)) {
       uploadFile.setIcon("/images/pdf.gif");
      } else if(".xls".equalsIgnoreCase(extName)) {
       uploadFile.setIcon("/images/excel.bmp");
      } else if(".jpg".equalsIgnoreCase(extName) || ".jpeg".equalsIgnoreCase(extName)) {
       uploadFile.setIcon("/images/jpg.jpg");
      } else {
       uploadFile.setIcon("/images/file.gif");
      }
     }
     insertDB(uploadFile);
    }
     ServletActionContext.getResponse().setContentType("text/html; charset=UTF-8"); // 转码
     PrintWriter out = ServletActionContext.getResponse().getWriter();
     out.flush();
     out.println("<script>");
     out.println("alert('上传成功!')");
     out.println("</script>");
   }
  } catch (Exception e) {
   e.printStackTrace();
   return upload_fail();
  }
  if ("".equals(flag) || flag==null) {
   return upload_ok();
  } else {
   String searchTemplate = "FROM UploadFile uploadFile WHERE 1=1 AND groupId=" + groupId;
   Map<String,Object> map = new HashMap<String,Object>();
   List<UploadFile> list = (List<UploadFile>) genericService.searchForList(searchTemplate, map);
   ServletActionContext.getRequest().setAttribute("result", list);
   ServletActionContext.getRequest().setAttribute("groupId", groupId);
   return "download";
  }
 }
 
 
 /**
  * 取得文件扩展名
  * @param str
  * @return
  */
 public String getExt(String str){               //获得文件的后缀名
  String subStr=str.substring(str.lastIndexOf("."));
  return subStr;
 }
 
 /**
  * 上传成功 ,转到成功页面
  *
  * @return
  */
 public String upload_ok() {
  ServletActionContext.getRequest().setAttribute("newGroupId", newGroupId);
  return "upload_ok";
 }
 
 /**
  * 获得组ID
  * @return
  */
 private int getGroupId() {
  String sql = "select max(groupId) from tbl_attrfile";
  int result = genericService.queryForInt(sql, Integer.class);
  result ++;
  return result;
 }

 /**
  * 添加到数据库
  *
  * @param file
  */
 private void insertDB(UploadFile uploadFile) {
  genericService.saveOrUpdate(uploadFile);
 }


 /**
  * 上传失败,转到错误页面
  *
  * @return
  */
 public String upload_fail() {
  return "upload_fail";
 }

 @Override
 public String execute() throws Exception {
/*  groupId = ServletActionContext.getRequest().getParameter("id");
  if ("".equals(groupId)) {
   groupId = getGroupId() + "";
  }*/
  return SUCCESS;
 }

 public GenericService getGenericService() {
  return genericService;
 }

 public void setGenericService(GenericService genericService) {
  this.genericService = genericService;
 }

 @Override
 public void prepare() throws Exception {
  newGroupId = getGroupId();
 }

 public File[] getUpload() {
  return upload;
 }

 public void setUpload(File[] upload) {
  this.upload = upload;
 }

 public String[] getUploadFileName() {
  return uploadFileName;
 }

 public void setUploadFileName(String[] uploadFileName) {
  this.uploadFileName = uploadFileName;
 }
 

 
}

struts.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>

 <constant name="struts.convention.action.mapAllMatches" value="true" />
 <constant name="struts.convention.default.parent.package" value="struts-config" />
 <constant name="struts.convention.action.packages" value="com.zdfd.elec.action" />
 <constant name="struts.convention.result.path" value="/" />

 <package name="struts-config" extends="struts-default" namespace="/">

  <interceptors>
   <interceptor name="exception" class="org.abin.core.struts.interceptor.ExceptionCatcherInterceptor" />
   <interceptor name="preloading" class="org.abin.core.struts.interceptor.PreloadingInterceptor" />
   <interceptor name="search" class="org.abin.core.struts.interceptor.SearchInterceptor" />
   <interceptor name="searchCleanUp" class="org.abin.core.struts.interceptor.SearchCriteriaCleanupInterceptor" />
   <interceptor name="myFileUpload" class="org.abin.core.struts.interceptor.MyFileUploadInterceptor" />

   <interceptor-stack name="elecSecDefaultWebStack">
    <interceptor-ref name="exception" />
    <interceptor-ref name="autowiring" />
    <interceptor-ref name="servletConfig" />
    <interceptor-ref name="prepare" />
    <interceptor-ref name="i18n" />
    <interceptor-ref name="staticParams" />
    <interceptor-ref name="chain" />
    <interceptor-ref name="searchCleanUp" />
    <interceptor-ref name="search" />
    <interceptor-ref name="preloading" />
    <interceptor-ref name="params">
     <param name="excludeParams">(eq|neq|gt|lt|geq|leq|like|in|orderby|groupby)/./D*</param>
    </interceptor-ref>
    <interceptor-ref name="conversionError" />
   </interceptor-stack>

   <interceptor-stack name="myFileUploadStack">
    <interceptor-ref name="exception" />
    <interceptor-ref name="myFileUpload">
     <param name="maximumSize">1048576</param>
    </interceptor-ref>
    <interceptor-ref name="autowiring" />
    <interceptor-ref name="servletConfig" />
    <interceptor-ref name="prepare" />
    <interceptor-ref name="i18n" />
    <interceptor-ref name="staticParams" />
    <interceptor-ref name="chain" />
    <interceptor-ref name="searchCleanUp" />
    <interceptor-ref name="search" />
    <interceptor-ref name="preloading" />
    <interceptor-ref name="params">
     <param name="excludeParams">(eq|neq|gt|lt|geq|leq|like|in|orderby|groupby)/./D*</param>
    </interceptor-ref>
    <interceptor-ref name="conversionError" />
   </interceptor-stack>

  </interceptors>

  <default-interceptor-ref name="elecSecDefaultWebStack" />

  <global-results>
   <result name="no_permission" type="redirect">/NoPermission.jsp</result>
   <result name="system_error">/SystemError.jsp</result>
   <result name="database_error">/SystemError.jsp</result>
   <result name="system_message">/SystemMessage.jsp</result>
  </global-results>

 </package>

</struts>

jsp页面:

<html>
<head>
 <%@include file="/include/include.jsp" %>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>上传页面</title>
 <link rel="stylesheet" type="text/css" href="table.css">
 <link type="text/css" rel="stylesheet" href="/elecSec/css/a.css"/>
 <link rel="stylesheet" type="text/css" href="${ctx }/themes/default/easyui.css">
 <link rel="stylesheet" type="text/css" href="${ctx }/themes/default/tree.css">
 <link rel="stylesheet" type="text/css" href="${ctx }/themes/icon.css">
 <link type="text/css" rel="StyleSheet" href="${ctx }/css/global.css">
 <link rel="stylesheet" type="text/css" href="${ctx }/js/ext/resources/css/ext-all.css" />
 <link rel="stylesheet" type="text/css" href="${ctx }/js/extchage.css" />
 <script type="text/javascript" src="${ctx }/js/ext/adapter/ext/ext-base.js"></script>
 <script type="text/javascript" src="${ctx }/js/ext/ext-all.js"></script>
 <script type="text/javascript" src="${ctx }/js/ext/apimenu.js"></script>
 <script type="text/javascript" src="${ctx }/js/jquery/jquery-1.4.2.js"></script>
 <script type="text/javascript" src="${ctx }/js/jquery/jquery.easyui.min.js"></script>
 <script type="text/javascript">
 /**
  * 定义列表中按钮的现实方式
  */
  Ext.onReady(function(){
   Ext.findTags('div', 'menu', function(o){
    Ext.initDropMenu(o, function(){
     if(Ext.inClass(this.tp, 'self')) {
      location.href=this.url;
     } else{
      var planid = this.pid;
      if(Ext.inClass(this.tp, 'callback')){
       parent.popWinOpen(this.url,'自查评',900,550,window,function (taskcontentuserid,score,level,question,zginfo,remark){
        if(taskcontentuserid==null && score==null && level==null && question==null && zginfo==null && remark==null ){
         return ;
        } else {
         window.location.href("${ctx}/fuchaping/fuchaping!saveZiChaPingDafen.action?taskcontentuserid="+taskcontentuserid+"&score="
           +score+"&level="+level+"&question="+question+"&zginfo="+zginfo+"&remark="+remark);
         alert("保存成功!");
        }
       } );
      } else{
       parent.popWinOpen(this.url, this.name,0,0,window);
      }
     }
    });
   });
  });
 
  //添加附件
  var i = 0;
  function addFile() {
   if(i > 9) {
    alert('已达到附件最大数');
    return;
   }
   var tabObj = document.getElementsByTagName("table")[0];
   var trObj = tabObj.insertRow();
   var tdObj1 = trObj.insertCell();
   var inputObj = document.createElement("input");
   tdObj1.setAttribute("colspan","2");
   inputObj.setAttribute("type", "file");
   inputObj.setAttribute("name", "upload");
   tdObj1.appendChild(inputObj);
   //var tdObj2 = trObj.insertCell();
   var imgObj = document.createElement("img");
   imgObj.src = "${ctx}/images/del.gif";
   imgObj.onclick = function(){
    //删除图片所在的行
    this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);
    i--;
   }
   tdObj1.appendChild(imgObj);
   i++;
  }
  
  //判断是否上传文件及文件类型是否合法
  function isFile() {
   var b = 0;
   var uploads = document.getElementsByName( "upload" ) ;
   var inputs = document.getElementsByTagName( "input" ) ;
   for( var i = 0 ; i < inputs.length ; i++ ){
    if(inputs[i].value!=null && inputs[i].value.length > 0) {
      b = 1;
      break;
     }
    }
   if(b==0) {
    alert('您没有选择要上传的文件');
    return false;
   }
   for( var i = 0 ; i < inputs.length ; i++ ){
    if(inputs[i].value!=null && inputs[i].value.length > 0) {
     var fileFullPath = inputs[i].value;
     var b = fileFullPath.indexOf(".bat");
     var w = fileFullPath.indexOf(".exe");
     if(b!=-1 || w!=-1) {
      var myregex=new RegExp(".exe");//创建正则表达式
      if(myregex.test(fileFullPath.substr(b)) || myregex.test(fileFullPath.substr(w))){//判断条件是否成立
       alert("文件格式不合法");
       return false;
      }
     }
    }
   }
    return true;
  }
 </script>
</head>
<body>
 <div class="content">
  <div class="control">
   <form action="${ctx }/upload/upload!doUpload.action" onsubmit="return isFile()" enctype="multipart/form-data" method="post" >
     <table cellpadding="0" cellspacing="1" class="tb1" width="150">
      <tr>
       <th colspan="2">
        请选择要上传的文件(*注意:不能上传.bat和.exe文件)
       </th>
      </tr>
     <tr>
      <td width="70%" colspan="2">
       <button type="button" onclick="addFile()" class='bgbtn'>添加附件</button>
      </td>
     </tr>
     <tr>
      <td width="70%" colspan="2">
       <input type="file" name="upload" />
      </td>
     </tr>
    </table>
    <button type="submit" class='bgbtn'>上传附件</button>
   </form>
   </div>
 </div>
</body>
</html>

 

原创粉丝点击