所谓动态,应该就是用户要求的数量.
设一个增加附件数量的button,让用户决定个数.

解决方案 »

  1.   

    左边一个文件选择框,右边一个下拉列表。选择好上传的文件可以通过javascript一个一个添加下拉列表中。下拉列表中的是一个数组。java程序中,根据数组的数量循环上传文件到服务器
      

  2.   

    谢谢各位。我就是要做到象163邮箱附件的那种效果。
    lshzfq(程序回归----->C++!) 你说的这个做法,我想过了,实现是没问题,但是不是很理想,163邮箱的多个附件是一次上传的。
    k3179(螃蟹) :你说的那个,当然是要那样做的,用户想添加附件,就点击按钮,增加一个filepigengler(en) :你提到的,确实是一个思路。但是很少见到附件上传,用那样的形式。能不能来点实际的东西,比方说
    Form怎么定义(数组,List???),
    Action中怎么获取,
    页面上标签怎么写?
    javascript怎么写(这个部分我倒是想到如何实现了)
      

  3.   

    form的定义<form id="upload" action="upload.do" enctype="multipart/form-data" method="post">
    javascript你知道怎么写吧。
    在Action中解析request.getServletInputStream,如果不想自己写,在网上下一个,这个太多了。
      

  4.   

    应该用list吧,list存放着Struts的上传类型(FileUpload吧),页面上你就用FileUpload对象.属性,记住index=true喔,每次脚本的时候加上这个吧,然后在Action取到上传的为一个list,一个取出即可了,这个我想的是一个思路吧,但没试过!2.你直接用smartload这个组件也可以的呀,不一定要用struts的呀,也是很简单呢,先做出来再研究吧,
    祝你好运!
      

  5.   

    不说废话,楼主觉得下面的代码用得上就给分吧。
    String dirPath = getServlet().getServletContext().getRealPath("/")
                             + "/upload";
            Hashtable fileh = actionForm.getMultipartRequestHandler().
                              getFileElements();
            for (Enumeration e = fileh.keys(); e.hasMoreElements(); ) {
                String key = (String) e.nextElement();
                try {
                    FormFile formfile = (FormFile) fileh.get(key);
                    String filename = formfile.getFileName().trim(); //文件名
                    if (!"".equals(filename)) {
      //不同的浏览器传上的文件名可能有区别,IE的是全路径的,Firefox等是只包含文件名
    //如果要按原文件名进行文件保存。自己在这里做下判断,
    //在这里保存文件
                        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) {
                    logger.debug("出错了", ex);
                }
            }
      

  6.   

    已经自己解决了。真的感觉现在的CSDN已经没有前几年的氛围了。问题总是得自己解决。真怀疑以后还要不要上来发帖。
    感谢大家的回复。
      

  7.   

    为了以后有这方面困惑的朋友能够顺利解决问题,将关键部分代码帖上来,权当抛砖引玉了。
    Form部分:
    public class MultiUploadForm extends ActionForm {
        private List myFiles;
        public MultiUploadForm(){
            myFiles = new ArrayList();
            //为了能够在页面初始显示一个file
            myFiles.add(new UploadFile());
        }
        public List getMyFiles() {
            return myFiles;
        }    public UploadFile getUploadFile(int index){
            int size = myFiles.size();
            if(index>size-1){
                myFiles.add(new UploadFile());
            }
            return (UploadFile)myFiles.get(index);
        }
        public void setMyFiles(List myFiles) {
            this.myFiles = myFiles;
        }
    }
      

  8.   

    Dataset部分:
    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;
        }
    }
      

  9.   

    不知道CSDN不能连续回复超过3次,所以没有帖完。
    需要的朋友,到http://blog.csdn.net/wts/看吧。
    我帖到Blog上了。