我正在使用apache-commons-fileupload
从client
获取文件到server
。(使用JSP
和Servlet
)。
JSP / HTML
<form method="POST" action="GetFile" enctype="multipart/form-data">
<input type="file" name="datafile">
<input type="text" name="text1">
<input type="submit" value="Next">
</form>
Servlet:GetFile
System.out.println(request.getParameter("text1"));
我可以将文件上传到服务器,但我无法在text1
中获得servlet
的值(我的null
值{{1}在text1
)中,我需要在表单中使用此servlet
,以便在将其上传到textfield
时提交一些其他信息。
server
选项是否允许其他
要提交的表格数据?如果它不允许,那么我必须将此额外enctype="multipart/form-data"
发送给textfield
的其他选项。答案 0 :(得分:13)
参数不会丢失,只是它们是请求Stream的一部分。
您必须从请求中获取所有项目,并根据其项目类型
进行相应的迭代和处理List items = upload.parseRequest(request);
继承人如何得到它
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();//text1
String value = item.getString();
} else {
processUploadedFile(item);
}
}
答案 1 :(得分:12)
表单的
enctype="multipart/form-data"
选项是否允许其他 要提交的表格数据?如果它不允许它那么是什么 其他选项我必须将此附加文本字段发送到服务器。
使用enctype="multipart/form-data"
时没有问题。您可以获取其他字段,然后以这种形式提交。
或者我的代码中还有其他问题吗?
是的,至于现在。使用enctype="multipart/form-data"
时,您无法使用request.getParameter(name);
直接获取参数。使用它时,表单字段不可用作请求的参数,它们包含在流中,因此您无法以正常方式获取它。您可以在{{3>}的处理上传的项目部分下找到一种方法。
答案 2 :(得分:1)
MultipartRequest req = new MultipartRequest(request, UPLOAD_PATH, 1024 * 1024 * 1024);
out.print(req.getParameter("contractNo"));
out.println("<BR>");
Enumeration files = req.getFileNames();
while (files.hasMoreElements()) {
String name = (String) files.nextElement();
String filename = req.getFilesystemName(name);
String type = req.getContentType(name);
File uploadedFile = req.getFile("xlFile");
FileInputStream fis = new FileInputStream(uploadedFile);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
FileWriter fstream = new FileWriter(UPLOAD_PATH + name, true);
BufferedWriter out11 = new BufferedWriter(fstream);
String aLine = null;
while ((aLine = in.readLine()) != null) {
//Process each line and add output to Dest.txt file
out11.write(aLine);
out11.newLine();
}
// do not forget to close the buffer reader
in.close();
// close buffer writer
out11.close();
}
上面的代码将读取文件以及其他表单数据,只需查看req.getParameter();
对象的MultipartRequest req
方法
答案 3 :(得分:0)
com.oreilly.servlet.MultipartRequest
Web-Inf/classes
您的servlet中的 doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
方法添加
MultipartRequest m = new MultipartRequest(request,&#34; C:\ SavingDirectory&#34;);
然后从表单中调用您的变量,如下所示;
String pdate = m.getParameter("plandate");
并从servlet中打印出来,如out.println(pdate);
答案 4 :(得分:0)
在Servlet中检索HTML表单字段的最佳做法是使用apache commons-fileupload 1.3 jar。
使用迭代器迭代多部分HTTPServletRequest并使用for循环检查它是否为isFormField(),然后
String item1=null,item2=null,item3=null;
if(item.isFormField())
{
if(item.getFieldName().equals("field1"))
{
item1=item.getString();
}
if(item.getFieldName().equals("field2"))
{
item2=item.getString();
}
if(item.getFieldName().equals("field3"))
{
item3=item.getString();
}
}
,你的HTML文件应该是这样的
<html>
<body>
<form action="servletname" method="post" enctype="multipart/form-data">
<input type="text" name="field1">
<input type="text" name="field2">
<input type="text" name="field3">
<input type="file" name="filetoupload">
<input type="submit" value="Upload">
</form>
</body>
</html>