【问题标题】:How do I pass additional info with <input type="file" >?如何使用 <input type="file" > 传递附加信息?
【发布时间】:2012-01-28 02:54:39
【问题描述】:

我需要将文件上传到在 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>

这是来自服务器端代码的 sn-p:

@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"),我总是会得到相应输入字段的值。这是唯一的例外,即当表单具有“文件”类型的输入字段时。

如何在文件上传提交的同时传递评论?

【问题讨论】:

  • 我不了解 Java 部分,但总的来说,这应该可以。 (想要添加一些特定语言的标签?)
  • 我认为你最好把你的servlet代码粘贴到这里,因为这个html表单没有问题。
  • html 代码肯定没有错,看看这里:javadb.com/get-request-parameters-in-a-servlet 这是一个应该可以工作的例子......
  • 我编辑了原始帖子并提供了服务器端sn-p。如您所见,它是普通的 servlet。上面的 html sn-p 选择的文件确实可以正确上传,管道确实可以正常工作,例如一切都按预期工作,唯一缺少的是评论文本区域的值。

标签: html servlets parameters upload submit


【解决方案1】:

您需要通过与获取上传文件内容时相同的 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?

【讨论】:

  • 感谢 BalusC 的出色回答和链接。这正是我修复我的功能所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
相关资源
最近更新 更多