我使用apache-commons-fileupload从client到server(使用JSP和Servlet)获取文件。
JSP/
<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中的值(我在servlet中获取text1的null值),我需要这个表单中的textfield提交一些附加信息,同时将它上传到server。
enctype="multipart/form-data"选项不允许其他表单数据被提交吗?如果它不允许它,那么我必须将这个附加的textfield发送到server的其他选项是什么。发布于 2013-02-27 06:17:24
表单的
enctype="multipart/form-data"选项不允许其他表单数据被提交吗?如果它不允许它,那么我必须将这个附加的textfield发送到服务器的其他选项是什么。
不,使用enctype="multipart/form-data"没有问题。您可以获得其他字段,然后以这样的形式存档。
或者我的代码中还有其他问题吗?
是的,就目前而言。在使用enctype="multipart/form-data"时,不能直接使用request.getParameter(name);获取参数。在使用它时,表单字段作为请求的参数不可用,它们包含在流中,因此无法以正常的方式获得它。您可以在the docs of using commons-fileupload#中找到一种方法来做到这一点。
发布于 2013-02-27 06:36:05
这些参数并没有丢失,只是它们是请求流的一部分。
您必须从请求中获取所有项,并根据它们的项类型迭代并相应地处理它。
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);
}
}发布于 2015-07-20 09:57:09
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();
}以上代码将与其他表单数据一起读取文件,只需查看MultipartRequest req对象的MultipartRequest req方法。
https://stackoverflow.com/questions/15105322
复制相似问题