在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>
下面是我的代码:
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>
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 ,这是怎么回事呢?
再后台看看能不能得到.
谢谢kimsung
如果你是用js控制的HTML.
当你点 <<新增>> 按钮之后 看看HTML源代码. 他和你hard coding的有何区别.还要注意看下<input type="file" name="这里的名字是否都是生成一样的"/>.
问题是smartupload不能识别新生成的文本标签啊 在上传文件的时候
String []file_names = req.getParameterValues("fileName");打印的正常的
但是mySmartUpload.getFiles().getCount()打印始终为1 也就是说smartupload不识别新生产的文本输入框……