2011-12-26 72 views
2

我需要将文件上传到运行在tomcat上的servlet。除了文件之外,我想让用户添加与上传文件相关的评论。我尝试以下,但它没有工作:如何通过<input type =“file”>传递附加信息?

<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( “评论”)以上的回报空线。 我在我的应用程序中使用了几个servlet和多个表单。在其他所有地方,如果我使用request.getParameter(“form-input-name”),我总是得到相应输入字段的值。这是唯一的例外,即当表单有一个类型为“file”的输入字段时。

我如何在注释中通过使用文件上传提交相处?

+0

我不知道有关Java的一部分,但在一般情况下,这应该工作。 (需要添加一些语言特定的标签?) – 2011-12-26 18:36:14

+1

我认为这是更好地为您在这里贴上您的servlet代码,因为在这个HTML表单没有问题。 – zuo 2011-12-26 18:37:06

+0

HTML代码中肯定有什么错在它 采取这里看看:http://www.javadb.com/get-request-parameters-in-a-servlet 这是应该工作的例子... – 2011-12-26 18:59:29

回答

3

您需要通过相同的 API获取文本字段值,这与您用于获取上传文件的内容相同。

您已指定HTML表单发送multipart/form-data编码中的数据,而不是标准的application/x-www-form-urlencoded编码。 multipart/form-data编码是强制性的,以便将该文件的内容与表单提交一起发送。但是,getParameter()方法仅与application/x-www-form-urlencoded结合使用。

A 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?

+0

非常感谢BalusC的出色答案和链接。这正是我需要修复我的功能。 – adaj21 2011-12-31 06:12:28

+0

不客气。 – BalusC 2011-12-31 20:34:17

相关问题