我想使用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'
答案 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中搜索以查找多部分请求处理程序的其他替代方法。