struts1.2 多文件上传问题,希望可以动态上传多文件。上传的文件格式是.txt 格式的。
有没有详细的例子,还望各位武林高手不吝赐教,先谢过啦!!!!

解决方案 »

  1.   

    可以在域中加上几个不同的Id的file域,比如一个页面你加上5个这样的东西不久一下子就可以上传5个啦...
      

  2.   

    1、使用一些控件来实现,有很不错的。LZ可以Google一下,很多开源的。
    2、自己写
    页面上通过动态的增加删除行来实现多附件上传,增加删除行使用JavaScript实现(addFileRow();)<html:form action="" method="post" enctype="multipart/form-data">
    .....
    <input type="file" name="file"  size="80"/>&nbsp;
           <input name="button" type="button" class="button_bg" value='增加附件' onclick="addFileRow();"/> 
    后台://多附件上传
    Hashtable htable = yourForm.getMultipartRequestHandler().getFileElements();
    //然后就是遍历这个htable 循环调用单附件上传就可以了
      

  3.   

    http://hi.baidu.com/k_boy/blog/item/8b0deaddda0ba9eb76c63832.html请看
      

  4.   


    <input type="file" name="file" />
    每个的name要不同名字
    同时form中指定enctype="multipart/form-data"
      

  5.   

    我给你贴个详细代码啊,我前几天调试好的,看完好用了给分。
     
        <tr>
          <td>添加附件:</td>
          <td>
          <table id="tb"></table><input type="button" name="btnAddFile" value="点击添加附件" onclick="additem('tb')"/>
          </td>
        </tr>    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);
         }
         ActionFrom中这样定义:    public class AddContentForm extends ActionForm {
    private static final long serialVersionUID = 1L;
    private String content;
    private String createTime;
    private String sender_name;
    private String tag;
    private String content_id;
    private  List  myFiles;

        public  AddContentForm(){
            myFiles  =  new  ArrayList();
            myFiles.add(new  UploadFile());
        }
        //  注意这个方法的定义  不加中间的循环是会出错的
        public  UploadFile  getUploadFile(int  index){
            int  size  =  myFiles.size();
    //        System.out.println("size-->>" + size);
    //        System.out.println("index-->>" + index);
            if(index>size-1){
             for(int i=0;i<index-size+1;i++){
                    myFiles.add(new  UploadFile());
             }
            }
            return  (UploadFile)myFiles.get(index);
        }
    public List getMyFiles() {
    return myFiles;
    } public void setMyFiles(List myFiles) {
    this.myFiles = myFiles;
    } public String getContent_id() {
    return content_id;
    } public void setContent_id(String content_id) {
    this.content_id = content_id;
    } public ActionErrors validate(ActionMapping mapping,
    HttpServletRequest request) {
    return null;
    } /** 
     * Method reset
     * @param mapping
     * @param request
     */
    public void reset(ActionMapping mapping, HttpServletRequest request) {
    } /** 
     * Returns the content.
     * @return String
     */
    public String getContent() {
    return content;
    } /** 
     * Set the content.
     * @param content The content to set
     */
    public void setContent(String content) {
    this.content = content;
    } /** 
     * Returns the createTime.
     * @return String
     */
    public String getCreateTime() {
    return createTime;
    } /** 
     * Set the createTime.
     * @param createTime The createTime to set
     */
    public void setCreateTime(String createTime) {
    this.createTime = createTime;
    } /** 
     * Returns the sender_name.
     * @return String
     */
    public String getSender_name() {
    return sender_name;
    } /** 
     * Set the sender_name.
     * @param sender_name The sender_name to set
     */
    public void setSender_name(String sender_name) {
    this.sender_name = sender_name;
    } public String getTag() {
    return tag;
    } public void setTag(String tag) {
    this.tag = tag;
    }
    }   public class UploadFile implements Serializable{
    private static final long serialVersionUID = 1L;
    private FormFile  file;

        public  FormFile  getFile()  {
    //        System.out.println("run  in  uploadFile.getFile()");
            return  file;
        }
        public  void  setFile(FormFile  file)  {    
         this.file  =  file;
        }
    }Action中这样写:   /**
     * 上传多个文件
     */
    List myFiles = addContentForm.getMyFiles();
    // String fileStr = "";
    // System.out.println("myFiles.size-->>"  + myFiles.size());
          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 {
            // 能运行到这里,就可以使用单个文件上传的方法进行上传了。循环而已
    //         System.out.println("文件名-->" + file.getFileName());
    //         System.out.println("文件大小-->" + file.getFileSize()/1024 + "kb");
    //         fileStr += "filename-->" + file.getFileName() +"-->" + "file  size-->" + file.getFileSize();
            //网络输入流,流向服务器
            String fileName = file.getFileName(); //文件名,realName
            int fileSize = file.getFileSize()/1024; //文件大小
            //重新拼接fileName
            String ext = Kbsutil.getExtension(fileName);//文件扩展名
            String saveName = new Date().getTime() + "." + ext;//在服务器上保存的文件名,saveName
            
            InputStream in = file.getInputStream();
            BufferedOutputStream out = null;
            //获取工程的相对路径
            String path = servlet.getServletConfig().getServletContext().getRealPath("/"); //工程在Tomcat目录
    //         System.out.println("绝对路径-->" + path);
            //输出流,向服务器的硬盘写
            out = new BufferedOutputStream(new FileOutputStream(path + "/upload/" + saveName));
            byte[] buffer = new byte[512];
            while(in.read(buffer) != -1){
            out.write(buffer,0,buffer.length);
            }
            //存入kbs_accessories表
            String savePath ="/upload/" + saveName;
    //         System.out.println("savePath-->" + savePath);
            bo.addAcc(savePath,fileName,saveName,fileSize,senderName,sendTime,content_id);
            out.close();
            System.out.println("文件上传成功!");
           }
          }