我想使用jsp将文件上传到mysql数据库

时间:2012-09-22 01:46:00

标签: jsp servlets

我想使用jsp将文件上传到mysql数据库。当我使用input type =“file”时,jsp没有返回完整路径。我需要完整的路径来在mysql db中上传文件。

<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'

3 个答案:

答案 0 :(得分:4)

  

我需要在mysql db中上传文件的完整路径。

这里有一个重大的思维错误。

想象一下,是想要上传文件的客户端,是需要获取文件内容的服务器。我完全按照您的要求,将完整的本地磁盘文件系统路径c:\path\to\sample.docx作为唯一信息提供给您。您如何成为服务器获取其内容?您是否有与本地硬盘文件系统的开放TCP / IP连接?真的?

这不是上传文件的方式。只有当服务器在物理上与客户端相同的机器上运行时,这才会起作用,因此您可以只使用FileInputStream该路径。因此,这只能在本地开发环境中工作,但绝对不能在实际生产中,服务器在与客户端不同的机器上运行,由HTTP连接分隔。

您应该对客户端与HTTP请求正文一起发送给您的唯一文件内容感兴趣。在HTML术语中,您可以在<input type="file">中使用<form enctype="multipart/form-data">。可以在此处找到有关完整代码示例的更详细答案:How to upload files to server using JSP/Servlet?它描述了使用request.getPart()的现代Servlet 3.0方式以及之前的事实标准Apache Commons FileUpload API。

一旦你以正确的方式实现它,你最终应该得到一个InputStream代表你从Servlet 3.0 part.getInputStream()或Apache Commons FileUpload {{1}获得的文件内容。 }。然后,您可以使用PreparedStatement#setBinaryStream()通常的方式将其存储在数据库和ResultSet#getBinaryStream()中,以便从数据库中检索它。

答案 1 :(得分: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>

答案 2 :(得分:0)

您应该使用像MultipartRequest这样的Multipart数据处理程序来读取servlet中的文件内容。客户端返回的路径将始终是客户端的本地路径,除了多部分方式之外,您无法读取文件。您可以在SO中搜索以查找多部分请求处理程序的其他替代方法。