牧雷心 2023-06-01 19:20 采纳率: 0%
浏览 10

jsp表单提交异常,图片上传数据库

在jsp项目中对文件进行上传时出现500错误提示:
java.lang.IllegalStateException: 由于没有提供multi-part配置,无法处理parts
例外情况:
org.apache.jasper.JasperException: 在 [13] 行处理 [/uploads/upload.jsp] 时发生异常
10:
11: <%
12: InputStream inputStream = null;
13: Part filePart = request.getPart("file");
14: String fileName = filePart.getSubmittedFileName();
15: long fileSize = filePart.getSize();
16: String fileType = filePart.getContentType();

form表单如下:

<body>
    <h1>Image Management</h1>
    <form action="upload.jsp" method="post" enctype="multipart/form-data">
        <label for="file">Select an image to upload:</label> <input
            type="file" name="file" id="file"><br> <input
            type="submit" name="submit" value="Submit">
    </form>
</body>

  • 写回答

2条回答 默认 最新

  • Java&Develop 2023-06-16 17:44
    关注

    问题原因:
    上传文件需要使用multipart/form-data编码方式,但是在jsp页面中没有设置这个编码方式,导致无法处理上传的文件。

    解决方法:
    在form表单中添加enctype="multipart/form-data"属性,告诉服务器使用multipart/form-data编码方式处理表单数据。

    修改后的form表单如下:

    <body>
        <h1>Image Management</h1>
        <form action="upload.jsp" method="post" enctype="multipart/form-data">
            <label for="file">Select an image to upload:</label> <input
                type="file" name="file" id="file"><br> <input            type="submit" name="submit" value="Submit">
        </form>
    </body>
    
    
    

    另外,上传文件时需要使用Part对象来获取上传的文件信息,而不是使用request.getParameter()方法获取表单数据。

    修改后的upload.jsp代码如下:

    <%@ page import="java.io.*, javax.servlet.http.*, javax.servlet.*"%>
    <%
        InputStream inputStream = null;
        Part filePart = request.getPart("file");
        String fileName = filePart.getSubmittedFileName();
        long fileSize = filePart.getSize();
        String fileType = filePart.getContentType();
    %>
    <h1>Upload Result</h1>
    <p>File Name: <%=fileName%></p>
    <p>File Size: <%=fileSize%> bytes</p>
    <p>File Type: <%=fileType%></p> 
    
    
    

    注意:上传文件到数据库时需要将文件内容转换为二进制数据存储。具体实现可以参考以下代码:

    <%
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
            String sql = "insert into image (name, type, content) values (?, ?, ?)";
            ps = conn.prepareStatement(sql);
            ps.setString(1, fileName);
            ps.setString(2, fileType);
            inputStream = filePart.getInputStream();
            ps.setBytes(3, inputStream.readAllBytes());
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
    %>
    
    

    这段代码将上传的文件内容转换为二进制数据,然后将文件名、文件类型、文件内容存储到数据库中。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月1日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题