2012-09-22 64 views
2

我想用jsp將文件上傳到mysql數據庫中。當我使用input type =「file」時,jsp沒有返回完整路徑。我需要完整的路徑上傳一個文件在MySQL數據庫。我想用jsp將文件上傳到mysql數據庫

<form id="translationFormID" method="post" action="saveTranslation"> 

<input type="file" name="attachCV" id="attachCVID" value="Attach CV"> 

<input type="submit" name="submit" /> 

</form> 

這是我的jsp頁面。我使用post方法調用servlet'saveTranslation'。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    String attachCV=null; 
    try{ 
     String attachCV=request.getParameter("attachCV"); 
     System.out.println("path= "+attachCV); 
    } 
    catch(Exception){ 
     e.printStackTrace(); 
    } 
} 

這是我的servlet代碼。這裏獲取並打印attachCV參數。當我打印attachCV,它顯示類似'c:\ fakepath \ sample.docx'

+0

繼續。你有我們的許可。:-)既然你沒有發佈任何能夠顯示你所嘗試的代碼的代碼,你的問題很可能會被關閉。這裏沒有足夠的信息來回答你的問題。僅僅使用'input type ='file''不會告訴你的服務器在哪裏存儲它,並且保存到客戶端文件夾的「完整路徑」(這是設置'輸入類型'可用的設置)在服務器上是沒有意義的。 –

+0

請給出一些建議。 –

+0

如果您不再重新發布相同的問題,情況會很好。謝謝。 – Kev

回答

4

我需要完整的路徑上傳文件在MySQL數據庫。

這裏有一個主要的思考錯誤。

想象一下,是誰想要上傳的文件,在客戶端和是誰需要獲得該文件的內容的服務器。我將完整的本地磁盤文件系統路徑c:\path\to\sample.docx作爲唯一信息提供給您,完全按照您的要求。作爲服務器,你會如何獲得其內容?你有一個開放的TCP/IP連接到我的本地硬盤文件系統?真?

這不是上傳文件的工作方式。如果服務器與客戶端運行在物理上相同的機器上,那麼這種方法只能運行,因此您可以使用FileInputStream與該路徑。因此,它只能在本地開發環境中工作,但絕對不是在現實世界的生產環境中,服務器在與客戶端不同的機器上運行,而是通過HTTP連接分開。

您應該對客戶端與HTTP請求主體一起發送給您的唯一文件內容感興趣。用HTML術語來說,您可以在<form enctype="multipart/form-data">中使用<input type="file">。有關完整的代碼示例的更詳細的答案可以在這裏找到:How to upload files to server using JSP/Servlet?它描述了使用request.getPart()和先前事實上的標準Apache Commons FileUpload API的現代Servlet 3.0方法。

一旦你以正確的方式實現它,你最終將得到一個代表從Servlet 3.0 part.getInputStream()或Apache Commons FileUpload item.getInputStream()獲得的文件內容的InputStream。然後,您可以使用通常的方式使用PreparedStatement#setBinaryStream()將其存儲在數據庫中,然後使用ResultSet#getBinaryStream()從數據庫中檢索它。

+0

謝謝你的迴應。它的工作正常。 –

0

當然, 您需要添加一個屬性enctype = "multipart/form-data"到您的窗體標記。以下代碼可解決您的問題。

<form id="translationFormID" method="post" enctype="multipart/form-data" 
action="saveTranslation"> 
    <input type="file" name="attachCV" id="attachCVID" value="Attach CV"> 
    <input type="submit" name="submit" /> 
</form> 
+0

這將如何幫助讀取servlet中的文件內容? – Vikdor

0

你應該使用一個多數據處理程序一樣MultipartRequest閱讀你的servlet文件內容。客戶端返回的路徑將永遠是客戶端的本地路徑,除了multipart方式之外,您無法讀取文件。您可以在SO中搜索以查找多部分請求處理程序的其他替代方法。

相關問題