无法使用servlet将图像插入mysql数据库

时间:2012-09-11 19:16:44

标签: java mysql filenotfoundexception

有人可以帮我解决以下问题吗? 我正在尝试通过servlet将图像插入mysql数据库中的blob列。 我正在通过JSP文件中的“HTML FILE INPUT TYPE”选择图像。因此,选择了图像的完整路径。

我得到的错误是:

HTTP Status 500 - Desert.jpg (The system cannot find the file specified)

type Exception report

message Desert.jpg (The system cannot find the file specified)

description The server encountered an internal error (Desert.jpg (The system cannot find the file specified)) that prevented it from fulfilling this request.

exception

    java.io.FileNotFoundException: Desert.jpg (The system cannot find the file specified)
        java.io.FileInputStream.open(Native Method)
        java.io.FileInputStream.<init>(Unknown Source)
        Image.ImgInsert.doGet(ImgInsert.java:51)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.28 logs.
Apache Tomcat/7.0.28

“Desert.jpg”是我桌面上的图像。 这个程序适用于我的朋友计算机。 这是servlet代码:

    String s_id = request.getParameter("myid");
    int id = Integer.parseInt(s_id);
    //IMAGE ACQUIRED FROM THE FROM THE JSP PAGE
    String img = request.getParameter("myimg");

    File f = new File(img);
    FileInputStream fis = new FileInputStream(f);

    String query="insert into images.imageinsert(id,image) values(?,?)";
    try
    {
        PreparedStatement pStatement = conn.prepareStatement(query);

        pStatement.setInt(1, id);
        pStatement.setBinaryStream(2, fis);
        int result = pStatement.executeUpdate();

        if(result != 0)
        {
            response.sendRedirect("ImageHome.html");
        }
        pStatement.close();

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:3)

这里至少有两个严重的概念错误。

  1. 您似乎认为拥有客户端本地磁盘文件系统路径足以获取服务器端的整个文件内容。这是不可能的,因为客户端和服务器不共享相同的磁盘文件系统(除非它们碰巧在物理上在同一台计算机上运行,​​当然这在现实世界中不会发生)。

  2. 您依赖于java.io内容中的相对路径。它变得相对于所谓的“当前工作目录”,即在网络服务器启动的那一刻就打开的文件夹。这绝对不是web应用程序直接所在的文件夹。例如C:\path\to\tomcat\bin。上传的文件肯定不会被神奇地放在那里。

  3. 至于为什么它在你的“朋友”的机器上工作,这无疑是因为他使用的Internet Explorer有一个安全漏洞,其中完整的文件路径而不是文件名已作为请求参数发送到{{ 1}} <input type="file">没有<form>的字段。同样,正如所回答的,这种方法肯定不会在真实的生产环境中起作用。

    通过仔细阅读以下答案,可以理解和解决您的具体问题。