java - JSP中图片上传问题

标签 java mysql jsp

我想在我的项目目录文件夹中上传一个名为Images的图像文件,并将图像名称存储在数据库中。

文件名已保存在数据库中,浏览器可以正确检索我的图像,但是当我检查名为Images的目录文件夹时,它是空的。

我的问题是:我的文件存储在哪里?为什么我在文件夹中看不到图像文件?

这是我的 Index.jsp 文件

<%-- 
    Document   : index
    Created on : Mar 15, 2018, 7:30:15 PM
    Author     : Lenovo
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

        <form name="form1" method="post" enctype="multipart/form-data" action="insertimage.jsp">

        <p>
        <input type="file" name="ImageFile" id="ImageFile" />
        </p>
        <p>
        <input type="submit" name="submit" value="submit" />
        </p>
        </form>

    </body>
</html>

这是我的 insertimage.jsp 文件

<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="java.util.*, java.io.*" %>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.util.List"%>
<%@ page import="java.io.File"%>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="getcon.jsp"%> <!-- to connect a database-->

<%
try
{
    String ImageFile="";
    String itemName = "";
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    if (!isMultipart)
    {
    }
    else
    {
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        List items = null;
        try
        {
            items = upload.parseRequest(request);
        }
        catch (FileUploadException e)
        {
            e.getMessage();
        }

        Iterator itr = items.iterator();
        while (itr.hasNext())
        {
            FileItem item = (FileItem) itr.next();
            if (item.isFormField())
            {
                String name = item.getFieldName();
                String value = item.getString();
                if(name.equals("ImageFile"))
                {
                    ImageFile=value;
                }
            }
            else
            {
                try
                {
                    itemName = item.getName();
                    File savedFile = new File(config.getServletContext().getRealPath("/") + "Images\\" + itemName);
                    out.println("File Uploaded.." + itemName);
                    item.write(savedFile);
                }
                catch (Exception e)
                {
                    out.println("Error" + e.getMessage());
                }
            }
        }
        try
        {
            st.executeUpdate("insert into test(image) values ('" + itemName + "')");
        }
        catch(Exception el)
        {
            out.println("Inserting error" + el.getMessage());
        }
    }
}
catch (Exception e)
{
    out.println(e.getMessage());
}
%>

这是我的retrieveimage.jsp 文件

<%@ include file="getcon.jsp"%>
<html>
    <head>
        <title>View Image Page</title>
    </head>
    <body>
        <table width="100%" border="0">
<!-- main content -->
<%
    ResultSet rs=null;
    try
    {
        rs = st.executeQuery("select image from test");

        while(rs.next())
        {
%>
        <table width="70%" height="160" border="1" align="center">
            <tr>
                <!-- Mention Directory where your images has been saved-->
                <td><img src="Images/<%=rs.getString("image") %>" width="115" height="128" /></td>
            </tr>
        </table>
<%
        }
    }
    catch(Exception e)
    {
        out.print("" + e.getMessage());
    }
%>
        </table>
    </body>
</html>

这是我的连接文件

<%@page import="java.sql.*" %>

<%
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sample", "root", "root");
Statement st = con.createStatement();
%>

最佳答案

以下内容更有可能发挥作用。

File savedFile = new File(config.getServletContext().getRealPath("/Images/" + itemName));
savedFile.getParentFile().mkdirs();
...

不确定服务器是否也是Windows;在其他系统上,路径名区分大小写(图像大写 i)。

您可以提供固定的 itemName 进行测试。

img 标签可能需要是:

<img src="/Images/ ...

关于java - JSP中图片上传问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49302482/

相关文章:

java - 当用户单击 WebView 内的链接时如何给出 url

java - invoke-virtual vs invoke-direct 在构造函数中

java - Apache Tomcat 无法加载 Mysql 驱动程序

mysql运行与group by的区别

sql - 帮助进行 SQL 查询

php - ECHO 变量包括换行符

java - 仅包含 JSTL 实现 jar

java - 即使在注销后,后退按钮也能像登录一样工作

java - 如何将数据从 jsp 页面插入 mysql 数据库并从 Eclipse 内部对该表运行查询?

java - 为 JSP 创建注销链接