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

标签 java mysql filenotfoundexception

有人可以帮我解决以下问题吗? 我正在尝试通过 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”是我桌面上的图像。 这个程序可以在我 friend 的计算机上运行。 这是 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. 您似乎认为拥有客户端本地磁盘文件系统路径就足以获取服务器端的整个文件内容。这是不可能的,因为客户端和服务器不共享相同的磁盘文件系统(除非它们恰好在物理上运行在同一台计算机上,这在现实世界中当然不会发生)。

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

至于为什么它在你的“ friend ”的机器上工作,毫无疑问是因为他使用的 Internet Explorer 有一个安全错误,其中完整的文件路径而不是仅文件名作为 <input type="file"> 字段上的请求参数发送没有 <form>enctype="multipart/form-data" 。同样,正如所回答的,这种方法肯定不会在真正的生产环境中工作。

仔细阅读以下答案即可了解并解决您的具体问题。

关于java - 无法使用 servlet 将图像插入 mysql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376430/

相关文章:

java - 无法从Java调用Shell脚本

java - 在项目文件夹中找不到文件

c# - AppDomain DoCallBack FileNotFound 异常

java - 获取二维数组android之一

java - 从 java 类调用 javascript 警报

mysql - 如何在 MySQL 中获取每个玩家的半个世纪、世纪和双百的数量

python - 将 MySQL 与 Python 连接

c# - 将列表框中的所有数据移动到数据库中的表中

未找到 Java I/O 文件

java - HQL 查询执行时间过长