0

我正在尝试通过从用户获取文件来将图像文件插入 MySql DB。在插入文件时,代码工作正常,但在将文件转换为 Blob 格式时,我得到一个java.io.FileNotFoundException这是我的 JSP 代码:

File img= new File(request.getParameter("rfile"));
String accno=request.getParameter("raccno");
String reportname=request.getParameter("reportname");
String date=request.getParameter("rdate");
PreparedStatement pt2=null;
pt2= connection.prepareStatement("insert into reportuser(Account_No,date,report_name,report_image)"+ "values(?,?,?,?)");
pt2.setString(1, accno);
pt2.setString(2, date);
pt2.setString(3, reportname);
pt2.setBinaryStream(4, (InputStream) fiss, (int) (img.length()));
pt2.executeUpdate();InputStream fiss=new FileInputStream(img);

异常报告如下:

org.apache.jasper.JasperException: An exception occurred processing JSP page /add_report.jsp at line 12
9: String reportname=request.getParameter("reportname");
10: String date=request.getParameter("rdate");
11: File img= new File(request.getParameter("rfile"));
12: InputStream fiss=new FileInputStream(img);

紧随其后的是:

root cause
java.io.FileNotFoundException: logo.png (The system cannot find the file specified)
    java.io.FileInputStream.open(Native Method)
    java.io.FileInputStream.<init>(FileInputStream.java:138)
    org.apache.jsp.add_005freport_jsp._jspService(add_005freport_jsp.java:78)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
4

1 回答 1

0

您不能在 Web 应用程序中执行此操作:

File img = new File(request.getParameter("rfile"));

从异常消息中,您可以看到您的应用程序正在尝试在其当前文件夹中查找文件。这与您添加的图像的位置不同,尤其是当 Web 应用程序运行在与 Web 浏览器不同的计算机上时。

澄清:如果您的 webapp 与您的 web 浏览器在同一台计算机上运行,​​则提交完整文件路径 ( c:\my_images\photo_of_me.jpg) 将起作用,因为 JVM 可以访问它。但只能通过完整的文件名。如果您的 webapp 在另一台计算机上,添加文件的唯一方法是使用 Commons FileUpload 接受文件上传。

您可能打算做的是“上传”图像并将其保存到数据库中。为此,您需要使用Apache Commons FileUpload

于 2013-04-13T16:53:22.337 回答