2012-09-22 65 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中搜索以查找多部分请求处理程序的其他替代方法。

相关问题