0

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

我得到的错误是:

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();

有人可以帮我吗?

4

1 回答 1

3

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

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

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

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

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

于 2012-09-11T19:22:02.207 回答