Html 如何通过<;传递附加信息;输入类型=";文件">;?

Html 如何通过<;传递附加信息;输入类型=";文件">;?,html,servlets,parameters,upload,submit,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='

我需要将文件上传到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>
服务器代码的省略部分处理接收上传文件的内容

上面的request.getParameter(“comment”)行返回null。 我在我的应用程序中使用了几个servlet和多个表单。在所有其他地方,如果我使用request.getParameter(“表单输入名称”),我总是会得到相应输入字段的值。这是唯一的例外,即当表单具有“file”类型的输入字段时


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

您需要通过与获取上传文件内容相同的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
解析器进行解析,例如众所周知的解析器,这是该领域事实上的标准。然而,由于Servlet 3.0(考虑到Servlet 3.0中引入了注释,您似乎正在实际使用它),因此有一种新方法允许您使用标准方法提取必要的提交数据,而无需Apache Commons文件上载。然而,它仍然只是比ApacheCommonsFileUpload更详细一点。您可以在下面的答案中找到这两种方法的一个具体示例:

我不知道Java部分,但一般来说,这应该是可行的。(想添加一些特定于语言的标记吗?)我认为最好将servlet代码粘贴到这里,因为这个html表单中没有问题。html代码中肯定没有任何错误。请看这里:这是一个应该可以工作的示例……我编辑了原始帖子并提供了服务器端代码片段。正如您所看到的,它是简单的香草servlet。上面的html代码段选择的文件上传正确,管道工作正常,即一切正常,唯一缺少的是comment textarea的值。感谢BalusC的出色回答和链接。这正是我修复功能所需要的。
@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}