<!--˜q™æ®µž®±æ˜¯¾|‘上COPY的动æ€ç”Ÿæˆé¡µé?->
   <%@ page language="java" pageEncoding="utf-8"%>
   <%@ taglib uri="   <%@ taglib uri="   <%@ taglib uri="   <%@ taglib uri="
   <script language="javascript">
    var num = 0;
    function upload(){
     document.getElementById("status").innerHTML = "æ–‡äšgä¸Šä¼ ä¸?..";
        multiUploadForm.submit();
      }
   function additem(id)
   {
    var row,cell,str;
    row = eval("document.all["+'"'+id+'"'+"]").insertRow();
    if(row != null )
       {
          cell = row.insertCell();
          str="<input type="+'"'+"file"+'"'+" name=uploadFile["+ num +"].file><input type="+'"'+"button"+'"'+" value="+'"'+"åˆ é™¤"+'"'+" onclick='deleteitem(this,"+'"'+"tb"+'"'+");'>"
         cell.innerHTML=str;
       }
    num++;
   }
   function deleteitem(obj,id)
   {
    var rowNum,curRow;
    curRow = obj.parentNode.parentNode;
    rowNum = eval("document.all."+id).rows.length - 1;
    eval("document.all["+'"'+id+'"'+"]").deleteRow(curRow.rowIndex);
   }
   function callback(msg)
   {
    document.getElementById("status").innerHTML = "æ–‡äšgä¸Šä¼ å®Œæˆ...<br>" + msg;
   }
   </script>
   <body bgcolor="#ffffff">
   <div id="status"></div>
   <html:form method="post" action="/multiUpload.do" enctype="multipart/form-data" target="hidden_frame">
   <table id="tb">
   </table>
   </html:form>
   <iframe name='hidden_frame' id="hidden_frame" style="display:none"></iframe>
   <input type="button" name="btnAddFile" value="Add File" onclick="additem('tb')"/>
   <input type="button" name="btnUpload" value="upload" onclick="upload()"/>
   </body>
   </html:html>
2.form
我把下é¢2个文件放在FORM包ä¸
   UploadFile .java
   package com.hb.struts.form;
   import java.io.Serializable;
   import org.apache.struts.upload.FormFile;
   public class UploadFile implements Serializable {
     private FormFile file;
        public FormFile getFile() {
                System.out.println("run in uploadFile.getFile()");
                return file;
        }
        public void setFile(FormFile file) {
                this.file = file;
        }
   }
   MultiUploadForm .java
   package com.hb.struts.form;
   import java.util.ArrayList;
   import java.util.List;
   import org.apache.struts.action.ActionForm;
   import com.hb.struts.UploadFile;
   public class MultiUploadForm extends ActionForm {
    private List myFiles;
       public MultiUploadForm(){
               myFiles = new ArrayList();
               myFiles.add(new UploadFile());
       }
       public List getMyFiles() {
               return myFiles;
       }
   //注愘q™ä¸ªæ–ÒŽ³•的定ä¹?ä¸åŠ ä¸é—´çš„åó@环是会出错的
     public UploadFile getUploadFile(int index){
               int size = myFiles.size();
               if(index>size-1){
                for(int i=0;i<index-size+1;i++){
                       myFiles.add(new UploadFile());
                }
               }
               return (UploadFile)myFiles.get(index);
       }
       public void setMyFiles(List myFiles) {
               this.myFiles = myFiles;
       }
   }
3.action
package com.hb.struts.action;
   import java.io.IOException;
   import java.io.PrintWriter;
   import java.util.List;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
   import org.apache.struts.action.Action;
   import org.apache.struts.action.ActionForm;
   import org.apache.struts.action.ActionForward;
   import org.apache.struts.action.ActionMapping;
   import org.apache.struts.upload.FormFile;
   public class MultiUploadAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
      HttpServletRequest request, HttpServletResponse response) {
     MultiUploadForm multiUploadForm = (MultiUploadForm) form;
     List myFiles = multiUploadForm.getMyFiles();
     String fileStr = "";
     for (int i = 0; i < myFiles.size(); i++) {
      UploadFile uploadFile = (UploadFile) myFiles.get(i);
      FormFile file = uploadFile.getFile();
      if (file == null) {
       System.out.println("file is null");
      } else {
       // 能è¿è¡Œåˆ°˜q™é‡ŒåQŒå°±å¯ä»¥ä½¿ç”¨å•个文äšgä¸Šä¼ çš„æ–¹æ³•è¿›è¡Œä¸Šä¼ äº†ã€‚åó@环而已
       System.out.println("filename>>>>>>>>>>" + file.getFileName());
       System.out.println("file size>>>>>>>>>>" + file.getFileSize());
       fileStr += "filename:::" + file.getFileName() + "file size:::"
         + file.getFileSize();
      }
     }
     // ˜q”回文本
     try {
      response.setHeader("ContentType", "text/html;charset=gbk");
      PrintWriter out = response.getWriter();
      out.write("<script>parent.callback('upload file success" + fileStr
        + "')</script>");
     } catch (IOException e) {
      e.printStackTrace();
     }
     return null;
    }
   }
转自åQ?a >http://hi.baidu.com/yanglu_168/blog/item/12c1382a4bc35028d42af1bd.html
       //System.out.println(CustgradeinputDownLoadAction.class.getClassLoader().getResource(""));
       //打开指定文äšgçš„æµä¿¡æ¯
      // InputStream is = new FileInputStream(request.getContextPath() + "/" +inPutFileName);
       InputStream is = new FileInputStream(request.getRealPath(inPutFileName));
       //写出‹¹ä¿¡æ?/p>
       int data = -1;
       OutputStream outputstream = response.getOutputStream();
       while ( (data = is.read()) != -1)
        outputstream.write(data);
       outputstream.flush();
       outputstream.close();
       is.close();
      Â
       return null;
 }