2013-10-08 78 views
0

我有一個Java動態Web項目,而且我正在使用TomCat v7.0。使用Java Servlet上傳文件

我是網絡項目的新手,我不太瞭解如何在一個我的jsp頁面上傳文件。由於我的項目只是本地的,所以我想我可以使用一個多部分的表單,在這個表單中用戶可以選擇這個文件(這個部分會很好),然後從我的Servlet中檢索文件路徑。雖然我不能完成這部分,它似乎只給我文件的名稱,而不是它的整個路徑。

任何人都可以指向正確的方向嗎?我已經閱讀了幾篇關於Apache文件上傳的文章,並從多部分表單中獲取信息,但似乎沒有任何幫助。

如何從窗體獲取文件路徑或者如何獲取上傳的文件以在我的Java類中使用?

在此先感謝。

.JSP:

<form method="post" action="upload" enctype="multipart/form-data"> 
<input type="file" name="filePath" accept="application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"></input> 
<input type="submit" value="Enviar"></input> 
</form> 

的Java Servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    PrintWriter out = response.getWriter(); 
    out.println("<html><body>"); 

    try 
    { 
     List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 
     for (FileItem item : items) 
     { 
      if (item.isFormField()) 
      { 
       // Process regular form field (input type="text|radio|checkbox|etc", select, etc). 
       String fieldname = item.getFieldName(); 
       String fieldvalue = item.getString(); 

       out.println("<h1>"+fieldname+"/"+fieldvalue+"</h1>"); 
      } 
      else 
      { 
       // Process form file field (input type="file"). 
       String fieldname = item.getFieldName(); 
       String filename = item.getName(); 
       InputStream filecontent = item.getInputStream(); 
       String s = filecontent.toString(); 
       out.println("<h1>"+s+"/"+filename+"</h1>"); 
       item.write(null); 
      } 
     } 
    } 
    catch (FileUploadException e) 
    { 
     throw new ServletException("Cannot parse multipart request.", e); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    out.println("</body></html>"); 
} 

回答

1

不提供文件路徑是瀏覽器的安全功能。

您的文件內容在您的代碼中可用(InputStream filecontent),因此您可以使用該文件或使用FileItem上的其中一種便捷方法,例如,

item.write(new File("/path/to/myfile.txt")); 
+0

你好,謝謝你的回答!我認爲這種方式來獲取文件(使用InputStream)確實是可行的。但是,你能向我解釋'item.write()'的功能嗎? –