0

我想解析相同输入类型和名称的多个表单字段值以及上传的文件,在我的设计中使用 java 脚本生成多个文件上传字段以及允许用户输入文件描述的文本字段,用户可以附加任意数量的字段。

用于创建 html 元素的 java 脚本

var d = document.createElement("div");
var file1 = document.createElement("input");
file1.setAttribute("type", "text");
file1.setAttribute("name", "fileName"+upload_number);
d.appendChild(file1);
var file = document.createElement("input");
file.setAttribute("type", "file");
file.setAttribute("name", "attachment"+upload_number);
d.appendChild(file);
document.getElementById("moreUploads").appendChild(d);
upload_number++;

对应的 HTML

<input type="file" name="attachment" id="attachment" onchange="document.getElementById('moreUploadsLink').style.display = 'block';"/>
<div id="moreUploads"></div>
<div id="moreUploadsLink" style="display:none;">
  <a href="javascript:addFileInput();">Attach another File</a>
</div>

检查,我的 java 脚本是如何工作的:http: //jsfiddle.net/8k926/90/

在我的文件上传 servlet 中,尝试调试并且它只解析第一个生成的值,它没有解析由 javascript 生成的下一个生成字段。

我的文件上传 servlet

 if(item.isFormField())
 {  
   String name = item.getFieldName();  
   if(name != null)  
   {  
     if(name.equals("fileName"))
     {  
       fileName = item.getString();  
     }
     else if(name.equals("main"))
     {  
       main = item.getString();  
     }
     else if(name.equals("sub"))
     {
       sub=item.getString();
     }
     else if(name.equals("filetype"))
     {
       filetype=item.getString();
     }
   }  
}else{  
  String file1=item.getFieldName();
  String file2=item.getName();
  filen=file2;
  ocation = File.separator+"home"+File.separator+"adapco"+File.separator+"Desktop"+ File.separator +"output"+ File.separator +main+File.separator+sub+File.separator+filen;
  uploadFile = new File(location);    
  //code for connecting and inserting the form field values into the database. 
}

上传单个文件后调试器正在退出。

4

1 回答 1

0

将第一个文本字段和文件字段名称更改为“fileName1”和“attachment1”。

JSP:

<input type="text" name="fileName1" size="30" onchange="document.getElementById('moreUploadsLink').style.display = 'block';"/>   
<input type="file" name="attachment1" id="attachment" onchange="document.getElementById('moreUploadsLink').style.display = 'block';"/>

小服务程序:

迭代所有字段。创建一个计数器int cntr=1;

String fileNameField="fileName";
Iterator iter = items.iterator();
while(iter.hasNext()){
    FileItem item = (FileItem) iter.next();
    if(item.isFormField())
     {  
       String name = item.getFieldName();  
       if(name != null)  
       {  
         if(name.equals(fileNameField+cntr))
         {  
           fileName = item.getString();  
         }
         else if(name.equals("main"))
         {  
           main = item.getString();  
         }
             else if(name.equals("sub"))
         {
        sub=item.getString();
         }
         else if(name.equals("filetype"))
         {
        filetype=item.getString();
         }
       }  
    }else{  
      String file1=item.getFieldName();
      String file2=item.getName();
      String filen=file2;
      String location = File.separator+"home"+File.separator+"adapco"+File.separator+"Desktop"+ File.separator +"output"+ File.separator +main+File.separator+sub+File.separator+filen;
      uploadFile = new File(location);    
          try {
         item.write(uploadFile);
      } catch (Exception e) {
         e.printStackTrace();
      }
      //code for connecting and inserting the form field values into the database. 
  }
于 2012-06-28T09:25:23.003 回答