请问 :  在做 动态 多 文件上传时(jsp页面表现为点击一个button新增一行或者说新增一个上传框) 用 如下代码 :String dirPath = getServlet().getServletContext().getRealPath("/")
                         + "/upload";
        Hashtable fileh = actionForm.getMultipartRequestHandler().
                          getFileElements(); //这里fileh.size()总是等于1
        for (Enumeration e = fileh.keys(); e.hasMoreElements(); ) {
            String key = (String) e.nextElement();
            try {
                FormFile formfile = (FormFile) fileh.get(key);
                String filename = formfile.getFileName().trim(); 
            *************   上传的结果只是上传了 最后一个上传框的文件 , 而不是所有的文件(多个) , 
  fileh.size() 那里总是等于1,  请问这是 什么原因呢?
 

解决方案 »

  1.   

    顶 一下 , 等待ing ^
      

  2.   

    Hashtable elements = multipartRequestHandler.getFileElements();        // 循环遍历每一个文件
            Collection values = elements.values();
            int k = 0;
            for (java.util.Iterator i = values.iterator(); i.hasNext();)
            {
                FormFile file = (org.apache.struts.upload.FormFile) i.next();
    ....
    我作的时候是这样取的,没有问题
      

  3.   

    我的是 : Hashtable fileh = actionForm.getMultipartRequestHandler().
                              getFileElements(); 而你的  :   Hashtable elements = multipartRequestHandler.getFileElements();
    你 这样能 取到 多个 文件 ?有点奇怪 ,我试试看.  谢谢 adverse(King) .
      

  4.   

    Hashtable elements = multipartRequestHandler.getFileElements();你这句话 是不是 写错了, 没有这样的写法的啊 ? 报错了!
    multipartRequestHandler 不能解吸.你是不是没帖完整的代码啊 ? adverse(King) 兄 !
      

  5.   

    DiskFileUpload fu = new DiskFileUpload();        // 得到所有的文件:
            List fileItems = fu.parseRequest(request);
            Iterator i = fileItems.iterator();
      

  6.   

    TO :DiskFileUpload 你能给出  DiskFileUpload   的代码就好了 ,上面那样的话我还是不能解决。
      

  7.   

    上面 是 TO:panjinfu80(天蓝水晶)   不好意思 !
      

  8.   

    怎么 没 人 回复呢 ?  up  again !
      

  9.   

    我怎么传给你,网上有的commons-fileupload.jar
      

  10.   

    是不是用commons-fileupload-1.2的?有時間看看。
    http://www.strongd.net/blog/show/28
      

  11.   

    楼上 朋友 你的jsp 页面 的 上传框 数量是 定死了的, 那样写在 form 里是没问题的,
    但我的jsp 页面 的数量是不定的。
    我用的是 struts  1.1  的 Formfile 
      

  12.   

    详细情况可先看我的blog 或 JSP 上传页面截图,如下http://download1.csdn.net/down3/20070601/01104322187.GIF  
      

  13.   

    String dirPath = getServlet().getServletContext().getRealPath("/") +
                             "/upload";
            Hashtable files = form.getMultipartRequestHandler().
                              getFileElements();
            for(Enumeration e = files.keys(); e.hasMoreElements();) {
                String key = (String) e.nextElement();
                try {
                    FormFile formfile = (FormFile) files.get(key);
                    String filename = formfile.getFileName().trim();
                    if (!"".equals(filename)) {
                        InputStream ins = formfile.getInputStream();
                        OutputStream os = new FileOutputStream(dirPath +
                                File.separatorChar
                                + filename);
                        int bytesRead = 0;
                        byte[] buffer = new byte[8192];
                        while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                            os.write(buffer, 0, bytesRead);
                        }
                        os.close();
                        ins.close();
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
      

  14.   

    楼上朋友 ,  你这段代码就是我以前用过的 ,前面还提到了.问题是这段代码 只能得到最后一个或一行上传框的内容 .需要说明的是 我的jsp 页面的 上传文件框的名字如果是同一类的话名字是相同的(构成一个数组,便于动态增加和删除等), 而且页面并不一定是每个上传框都要有上传的内容,即可以为空。可先看我的JSP 上传页面截图,如下
    http://download1.csdn.net/down3/20070601/01104322187.GIF  
      

  15.   

    我 也遇见了这个问题 ,但是我已经解决了 。如果你现在还需要解决这个问题,我贴一下了 、其实获取最后一个文件的原因是:第2个附件覆盖了第一个 ,第3个覆盖第二个,以此类推导致只能上传最后一个。这主要是因为你jsp页面 的 上传的那个 <input type=file name=file>所有的name 都一样 
    如果你修改成 <input type=file name=file><input type=file name=file1><input type=file name=file2>那么你的哪个Hashtable fileh = mobleTableForm.getMultipartRequestHandler().getFileElements(); fileh.size();就不会是1了~~~下面是我做的一个小例子
    --------------------jsp------------------------
    js部分 :::---    <script language="javascript">
        
     var index = 0;
        function addTable(){
    document.getElementById("num").value = ++index;
    $("#file_area").append("<tr align=center>\
    <td  align='center'  >附件<input type='file' name='file"+index+"' ></td\
    </td></tr>");}
    </script>
    form 部分:::
    <form action="/NbgovBszn/insertMobleTable.do" name="form1" method="post" enctype="multipart/form-data">enctype="multipart/form-data"这个属性主管重要 附件添加调用js脚本 :::
    <A title=添加  href="javascript:addTable()">  添加附件 </A>文本框部分 ::
       <tbody id="file_area">  <tr>
           <td>附件<input type="hidden" name="num" id="num"/></td>
        </tr> 
      </tbody>
    -------------------action-------------------------- String filename="";
    String dirPath = getServlet().getServletContext().getRealPath("/")
        + thingCode[a];
    new File(dirPath).mkdirs();
     
      Hashtable fileh = mobleTableForm.getMultipartRequestHandler().getFileElements();
      MultipartRequestHandler multipartRequestHandler = mobleTableForm.getMultipartRequestHandler();
       // 取得所有上传文件的对象集合
       Hashtable elements = multipartRequestHandler.getFileElements();
       
       
      for (Enumeration e = fileh.keys(); e.hasMoreElements();) {
      
    //  System.out.print("----------------"+e.);
       String key = (String) e.nextElement();
       try {
        FormFile formfile = (FormFile) fileh.get(key);
         filename = formfile.getFileName().trim(); // 文件名
        
        int size=formfile.getFileSize();
        if(size/1024/1024>5){
         request.setAttribute("flag","附件大小不能超过5M");
         return mapping.findForward("flag");
        }
        if (!"".equals(filename)){
         // 不同的浏览器传上的文件名可能有区别,有的是全路径的
         // 在这里保存文件
         InputStream ins = formfile.getInputStream();
         OutputStream os = new FileOutputStream(dirPath
           + File.separatorChar + filename);
         
         
        // System.out.println(dirPath  + File.separatorChar + filename);
         int bytesRead = 0;
         byte[] buffer = new byte[8192];
         while ((bytesRead = ins.read(buffer, 0, 8192)) != -1){
          os.write(buffer, 0, bytesRead);
         }
         os.close();
         ins.close();}
      

  16.   

    楼上的高见...事实是这样的..我碰到的和楼主是一样的问题,主要原因是我们的上传文件的控件(N个)的名称(name)是一样的..导致只取了最个一个..当最后一个有图像时就为1..没有的时候则为null...