在upload.html 中 使用dom增加的textfield 中的文件无法上传,追了下源码没看大懂  请各位大大们指教  
下面是我的代码:
upload.html:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script type="text/javascript"> 
       function addArea(){
// alert("addArea()");
var table_name=document.getElementById("table1");
var tr1 = document.createElement("tr");
var td11 = document.createElement("td");
var td12 = document.createElement("td");
var fileName = document.createTextNode("文件名");
var textField1 = document.createElement("input");
textField1.setAttribute("type","text");
textField1.setAttribute("name","fileName");
td11.appendChild(fileName);
td12.appendChild(textField1);
tr1.appendChild(td11);
tr1.appendChild(td12);

var tr2 = document.createElement("tr");
var td21 = document.createElement("td");
var td22 = document.createElement("td");
var fileDirectory = document.createTextNode("文件路径");
td21.appendChild(fileDirectory);
var textField2 = document.createElement("input");
textField2.setAttribute("type","file");
td22.appendChild(textField2);
tr2.appendChild(td21);
tr2.appendChild(td22);


            table_name.appendChild(tr1);
table_name.appendChild(tr2);
// alert("OK");
}

function deleteArea(){
if(document.getElementsByName("tr").length>2){
document.getElementById("table1").removeChild(document.getElementById("table1").lastChild);
document.getElementById("table1").removeChild(document.getElementById("table1").lastChild);
}
}
 
</script>
</head>
 
<body>
<form action="FileUploadServlet" method="post" encType="multipart/form-data" >
<table width="313" border="1" id="table1">
  <tr>
<td width="85">文件名</td>
<td width="212"><input type="text" name="fileName"></td>
  </tr>
  <tr>
<td width="85">上传文件</td>
<td width="212"><input type="file" name="upload_file_name"></td>
  </tr>
 
</table>

<input type="submit" value="上传">
<input type="reset" value="重填">

</form>
<a href="javascript:addArea()">增加</a>
<a href="javascript:deleteArea()">删除</a>
</body>
</html>

解决方案 »

  1.   

    下面是servlet内容FIleUploadServlet:package servlet;import java.io.IOException;
    import java.io.PrintWriter;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import resources.SmartFile;
    import resources.SmartRequest;
    import resources.SmartUpload;
    import resources.SmartUploadException;
    public class FileUploadServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    doPost(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { //response.setContentType("text/html");
    //PrintWriter out = response.getWriter();
    System.out.println("access into FileUploadServlet");

    SmartUpload mySmartUpload = new SmartUpload();
    mySmartUpload.initialize(this.getServletConfig(), request,response);
    //mySmartUpload.setMaxFileSize(100000);
    try {
    mySmartUpload.upload();
    } catch (SmartUploadException e) {
    e.printStackTrace();
    }
    SmartRequest req = mySmartUpload.getRequest();
    String file_name = req.getParameter("file_name");
    System.out.println("file_name = "+file_name);

    System.out.println("mySmartUpload.getFiles().getCount() = "+mySmartUpload.getFiles().getCount());
    for(int i=0;i<mySmartUpload.getFiles().getCount();i++){   //插入多个文件
    SmartFile file = mySmartUpload.getFiles().getFile(i);
    System.out.println("路径 = "+file.getFileName());//
    if(file.isMissing())
    continue;
    try {
    file.saveAs("fileStore/"+file.getFileName());
    } catch (SmartUploadException e) {
    e.printStackTrace();
    }
    }
    }}
    问题:点击html中“增加”连接时 会增加两个tr 用于上传多个文件,但是新增加的tr中的文件 不能上传,不管新添加几个文件 System.out.println("mySmartUpload.getFiles().getCount() 在控制台上输出的是1 ,这是怎么回事呢?
      

  2.   

    你先试试写死两个input. 然后这两个input的name值都弄成不一样的.
    再后台看看能不能得到.
      

  3.   

    我试过 只要是页面上原有的,不是通过document 增加的input就能上传  
    谢谢kimsung
      

  4.   

    还没解决么?
    如果你是用js控制的HTML.
    当你点 <<新增>> 按钮之后 看看HTML源代码. 他和你hard coding的有何区别.还要注意看下<input type="file" name="这里的名字是否都是生成一样的"/>.
      

  5.   

    可以批量上传的,用个for循环
      

  6.   

    先谢谢kingsung啦 你说的这些都没有问题 用dom生成的tr都没有问题 源码跟hard conding也是一样的 
    问题是smartupload不能识别新生成的文本标签啊  在上传文件的时候
    String []file_names = req.getParameterValues("fileName");打印的正常的 
    但是mySmartUpload.getFiles().getCount()打印始终为1 也就是说smartupload不识别新生产的文本输入框……
      

  7.   

    能批量上传不假 但现在是smartupload不能识别新生成的input标签中的文件