我´我一直试图将一个文件从一个html页面远程上传到一个servlet,然后保存到一个数据库中,到目前为止,我已经设法在本地完成了这项工作,但是当使用同一网络中的另一台计算机时,我得到了一个错误的解释,说明系统找不到指定的文件。
我使用以下表格接收文件:
<form method="post" action="UploadFile" enctype="multipart/form-data">
<tr>
<td><Input name="name" type="text"></td>
<td><Input name="client_ID" type="text" required></td>
<td><input name="date" type="date"></td>
<td><input name="pdf" type="file"></td>
<td><input name="xml" type="file"></td>
</tr>
</form>
链接到servlet中的以下操作:
String url = "jdbc:mysql://localhost/database";
Connection con;
String path1=request.getParameter("pdf");
String path2=request.getParameter("xml");
String name=request.getParameter("name");
String date=request.getParameter("date");
String client=request.getParameter("client_ID");
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url,"user", "password");
PreparedStatement stat = con.prepareStatement("insert into table(pdf, xml, date, client, employee_ID, client_ID) values(?,?,?,?,1,?)");
InputStream is = new FileInputStream(new File(path1));
stat.setBlob(1,is);
InputStream is2 = new FileInputStream(new File(path2));
stat.setBlob(2,is2);
stat.setString(3,date);
stat.setString(4,name);
stat.setString(5,client);
并引发以下异常:
java.io.FileNotFoundException: file.pdf (The system could not find the specified file)
我知道问题来自servlet试图从主机上传文件。任何帮助都将不胜感激。
2条答案
按热度按时间e4yzc0pl1#
您正在从请求中读取文件名,但是当文件内容实际上在请求中时,您正在尝试从磁盘中读取文件内容。
尝试以下方法开始:
现在。。。你的代码还有很多其他的问题,这些问题应该在以后的工作中解决。没有特定顺序,它们是:
验证您得到的所有输入,以确保它们是正常的。我可以把2GB的文件上传到你的数据库吗?如果一个扩展名为pdf的文件实际上是xml文件呢?反面呢?如果您希望pdf文件是pdf,而xml文件是xml,那么最好检查以确保客户端发送的是xml。不要在你的数据库中插入任何你没有检查过的东西,以确保它的合法性和适当性。
使用jdbc连接池。别再打电话了
Class.forName()
以及DriverManager.getConnection()
每一个请求。将代码重新划分为不同的部分:一部分用于从请求中获取数据,另一部分用于将数据写入数据库。没有充分的理由从同一段代码执行http和jdbc活动。这是什么,php?
资源管理:确保所有可关闭的资源都使用
try/catch/finally
把所有东西都清理干净。这包括Part
项目,应该有delete()
方法在完成它们时调用。7gyucuyw2#
这个问题是这个问题的重复。读取用java上传的文件的内容
您必须先将文件保存到本地硬盘。
将本地硬盘文件发送到mysql数据库。
读取流并将其保存到本地硬盘。
现在,将本地路径传递给mysql query。