jquery - 使用jsp、servlet将图像上传到mysql

标签 jquery mysql jsp servlets

JSP

<form action="AddCategoryServlet" id="AddCategoryForm" target="_self" method="post">
        <table>
        <tr> 
            <td> <div align="center" class="group">
                 <input type="text" id="CName" name="texCname" required />
                 <span class="highlight"></span>
                 <span class="bar"></span>
                 <label id="CNamecheck">Category Name</label>
                 </div>
        </tr>
        <tr>
            <td> <div align="center" class="group">
                 <input type="text" id="CDescript" name="texCdescript" required />
                 <span class="highlight"></span>
                 <span class="bar"></span>
                 <label id="CDescriptcheck">Category Description</label>
                 </div>
        </tr> 
        <tr>
            <td> <div align="center" class="group">
                 <input type="text" id="CImage" name="texCImage" required/>
                 <span class="highlight"></span>
                 <span class="bar"></span>
                 <label id="CImagecheck">File Path</label>
                 <input style="display:none;" type="file" id="file" name="file"/>
                 <input style="position:absolute;top:10px;left:315px;font-size:10px;" type="button" value="Choose Image" id="uploadbutton" class="myButton" />
                 </div>  
        </tr>               
        </table>
        <input type="submit" value="Add Category" class="myButton" />
        </form>

单击时选择图像按钮会使用 jquery 触发输入类型=文件的单击事件:

$("#uploadbutton").click(function(){
    $("#file").click();
});

我用于将文件放入数据库的 servlet 是 -:

try
    {
        String Name,Description=null;
        Name=request.getParameter("texCname");
        Description=request.getParameter("texCdescript");

        InputStream inputStream= null;
        Part filePart= null;
        filePart= request.getPart("file");

        if (filePart != null) 
        {
            System.out.println(filePart.getName());
            System.out.println(filePart.getSize());
            System.out.println(filePart.getContentType());

            inputStream = filePart.getInputStream();
        }

        Connection con= BaseDAO.getConnection();

        PreparedStatement pst = con.prepareStatement("INSERT INTO CATEGORY(Category_Name, Image, Description) VALUES (?,?,?)");
        pst.setString(1,Name);
        pst.setBlob(2,inputStream);
        pst.setString(3,Description);
        pst.executeUpdate();


    }
    catch(ClassNotFoundException | SQLException e)
    {
        e.printStackTrace();
    }

我收到“图像”列不能为空的错误。经过调试,我发现变量 filePart 的值为 null,即它没有从 jsp 接收 name="file"的参数。有人可以指出我错在哪里吗?

最佳答案

您无法以单一形式一次处理文本和输入类型文件等纯输入类型,您需要特殊的库来处理此类请求。

您需要在表单中编写enctype="multipart/form-data"

 <form action="AddCategoryServlet" id="AddCategoryForm" target="_self" method="post" enctype="multipart/form-data" >
     ........
 </form>

但是,请注意,通过编写 enctype="multipart/form-data" 您将无法处理纯输入,即 input type="text"

因此,如果您想要一种简单的方法,请在发送图像时创建 2 个单独的表单,其中包含 enctype="multipart/form-data" 以及您在问题中指定的仅包含文本数据的表单.

关于jquery - 使用jsp、servlet将图像上传到mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30823428/

相关文章:

java - 文本数据类型的PreparedStatement

apache - 如何将 spring 应用程序托管在 apache 服务器中?

java - JSP引擎处理jsp文件时如何获取servlet代码

javascript - 使用 if 语句调用函数

jquery - 将当前行添加到表中

mysql - 在MySQL表中存储一个大数组

java - 通过java swing向数据库插入数据

javascript - 如何在动态表中创建唯一的ID?

javascript - 单击另一个元素时如何禁用元素?

php - MySQL中的排行榜排名/海量数据整理