我需要将文件上传到在tomcat上运行的servlet。除了文件,我还想允许用户添加与上传文件相关的评论。我尝试了以下但是没有用:
<form action='MyUploadServlet' enctype='multipart/form-data' method='POST'>
<input type='file' name='filechooser'><br />
<textarea name='comment' cols='15' rows='5'></textarea>
<input type='Submit' value='Upload'><br />
</form>
以下是服务器端代码的片段:
@WebServlet("/MyUploadServlet")
public class MyUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
ServletContext sc = request.getServletContext();
String comment = (String)request.getParameter("comment");
....etc}
服务器代码的省略部分用于接收上传文件的内容。
上面的request.getParameter(“comment”)行返回null。 我在我的应用程序中使用了几个servlet和多个表单。在所有其他地方,如果我使用request.getParameter(“form-input-name”),我总是得到相应输入字段的值。这是唯一的例外,即表单的输入字段为“file”类型时。
如何将评论与文件上传提交一起传递?
答案 0 :(得分:3)
您需要通过相同的 API获取文本字段值,以获取上传文件的内容。
您已指定HTML表单以multipart/form-data
编码而非标准application/x-www-form-urlencoded
编码发送数据。 multipart/form-data
编码是必需的,以便将文件的内容与表单提交一起发送。但是,getParameter()
方法仅与application/x-www-form-urlencoded
结合使用。
multipart/form-data
请求通常使用multipart/form-data
解析器进行解析,例如众所周知的Apache Commons FileUpload,这是该领域的事实标准。但是,由于Servlet 3.0(你似乎实际上正在使用,因为Servlet 3.0中也存在引入@WebServlet
注释),因此有一个新的getParts()
方法,它允许您提取必要的提交数据使用标准方法而无需Apache Commons FileUpload。然而,它仍然比Apache Commons FileUpload更加冗长。您可以在此答案中找到这两种方法的具体示例:How to upload files to server using JSP/Servlet?