【问题标题】:Unable to Insert image to mysql database using servlet无法使用 servlet 将图像插入 mysql 数据库
【发布时间】:2012-09-11 19:16:43
【问题描述】:

谁能帮我解决以下问题? 我正在尝试通过 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();

谁能帮帮我?

【问题讨论】:

  • 我强烈怀疑程序图像路径中的某些位置是硬编码的。
  • 感谢 Nambari 抽出时间来回答。但正如我上面提到的,没有任何更改的相同程序可以在我朋友的计算机上运行。
  • 尝试将fis写入一个新文件,看看它是否被创建...
  • @alfasin:我强烈建议您也阅读答案,因为您似乎根本不理解这个问题。
  • @BalusC 我在考虑你在#2(相对路径)中提到的同样的问题。我得承认我没有考虑你提到的其他事情。对于@KaR,顺便说一句,该文件必须与您的JSP 文件位于同一文件夹中 - 不在任何其他桌面/根文件夹中。

标签: java mysql filenotfoundexception


【解决方案1】:

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

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

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

至于为什么它可以在你的“朋友”的机器上运行,这无疑是因为他使用的 Internet Explorer 存在安全漏洞,其中完整的文件路径而不是文件名作为请求参数被发送到 @987654326没有enctype="multipart/form-data" 的&lt;form&gt; 的@ 字段。同样,正如所回答的那样,这种方法肯定不会在真实的生产环境中工作。

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

【讨论】:

  • 非常感谢,但我尝试从应用程序所在的同一目录插入图像。结果是一样的。我已经在没有 Eclipse IDE 和它的情况下尝试了整个过程。错误总是一样的。我无法回答自己的问题是,为什么在另一台机器上,它可以与从硬盘上的任何位置选择的图像一起工作。
  • 换句话说,您根本不了解具体问题。只要你不理解一个问题,解决它将是一个非常漫长而艰难的过程。不要粗鲁地大喊大叫,仔细浏览提供的三个链接(第一个和第二个应该解释为什么它失败了,第三个显示如何以正确的方式做)。
  • 嗯...非常感谢。我非常感谢您的回答。如果我遇到任何问题,我会尝试你提到的所有事情并回来。
猜你喜欢
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2015-02-20
  • 2013-03-07
相关资源
最近更新 更多