2011-12-26 71 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

相關問題