如何上传文件并获取表单的其他参数?我想在Java servlet中处理多部分请求。
答案 0 :(得分:12)
要浏览并选择要上传的文件,您需要在表单中添加<input type="file">
字段。如HTML specification中所述,您需要使用POST
方法,并且表单的enctype属性必须设置为multipart/form-data
。
<form action="uploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" />
</form>
提交此类表单后,表格数据在HttpServletRequest#getInputStream()
中以多部分格式提供。为了测试(!),您可以使用以下代码段读取流:
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
然而,你需要逐字节解析流(而不是char的char)。在新的新Servlet 3.0 API之前,标准的Servlet API没有提供任何内置工具来解析它们。普通表单字段也不常用request.getParameter()
方式,它们包含在多部分表单数据流中。
如果你还没有使用Servlet 3.0(只有不到2个monts),那么你需要自己解析流。解析这样的流需要有关多部分表单数据请求specified and structured的精确背景知识。要创建一个完美的多部分解析器,您必须编写大量代码。但幸运的是Apache Commons FileUpload已证明其多年来的稳健性。仔细阅读User Guide和Frequently Asked Questions以查找代码示例,并了解如何将其用于最佳程度(将MSIE考虑在内!)。
答案 1 :(得分:5)
第1步
阅读adatapost的帖子。
第2步
查看Apache Commons FileUpload项目。
O'Reily有一个类似可行的解决方案,但它的使用许可要求你买一本书,即使这个要求是如此清晰,我也不会因为另一个链接而受益。
答案 2 :(得分:2)
<强>步骤1 强>
设置enctype表单标记属性。
<form enctype="multipart/form-data" ....>
<input type="file" id="file1" name="file"/>
.... other stuff
</form>
<强>步骤-2 强>
阅读贾斯汀的帖子。
答案 3 :(得分:1)
要处理 enctype =“multipart / form-data”,我们无法直接使用request.getParameter()
现在来处理问题
现在,为了将文件上传到服务器,可以有多种方式。但是,我将使用oreilly提供的MultipartRequest类。要使用此课程,您必须拥有 cos.jar 文件。
public class UploadServlet extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
MultipartRequest m=new MultipartRequest(request,"d:/new");
out.print("successfully uploaded");
}
}
这会将您的文件上传到d:/ new
现在要检索多部分请求的参数
您必须使用FilenameUtils
类和getOriginalFileName()
类的MultipartRequest
方法。
String file = FilenameUtils.getName(req.getOriginalFileName("myfile"))+"\\";
String message = req.getParameter("message");
答案 4 :(得分:0)
这对IE7及以下版本无效。显然,您需要在表单encoding =“multipart / form-data”
中添加另一个属性