如何使用<input type =“file”/>传递其他信息?

时间:2011-12-26 18:30:41

标签: html servlets parameters upload submit

我需要将文件上传到在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”类型时。

如何将评论与文件上传提交一起传递?

1 个答案:

答案 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?