R257983 2024-06-08 15:46 采纳率: 20%
浏览 3
已结题

为什么图片信息传不到数据库

为什么图片信息传不到数据库

package Servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.sql.*;
import JDBC.JDBC;
import javax.sql.DataSource;
import useBean.imageDB;
import javaBean.Img;
import java.nio.file.*;

@WebServlet("/UploadServlet")
@MultipartConfig(maxFileSize = 1024*1024*5) // 设置上传文件的最大大小为5MB


public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String title = request.getParameter("title");
        String description = request.getParameter("description");
        String type = request.getParameter("type");
        String publish = request.getParameter("publish");
        InputStream inputStream = null; // 用于保存上传的图片
        // 获取上传的文件
        Part filePart = request.getPart("file");
        if (filePart != null) {
            inputStream = filePart.getInputStream();
        }
        Connection conn = null;
        String message = null;
        try {
            // 准备SQL语句
            String sql = "INSERT INTO images (title, description, type, publish, image_path) values (?,?,?,?,?)";
            PreparedStatement statement = conn.prepareStatement(sql);
            statement.setString(1, title);
            statement.setString(2, description);
            statement.setString(3, type);
            statement.setString(4, publish);

            if (inputStream != null) {
                // 保存上传的图片到指定文件夹
                String imagePath = saveImage(inputStream);
                // 将图片的相对路径存储在数据库中
                statement.setString(5, imagePath);
            }

            // 执行SQL语句
            int row = statement.executeUpdate();
            if (row > 0) {
                message = "文件上传成功";
            }
        } catch (SQLException ex) {
            message = "ERROR: " + ex.getMessage();
            ex.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }
            request.setAttribute("message", message);

            // 将消息转发到JSP页面或者返回JSON响应
            // 这里简单地转发到一个JSP页面
            getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
        }
    }

    // 保存上传的图片到指定文件夹,并返回图片的相对路径
    private String saveImage(InputStream inputStream) throws IOException {
        
        String uploadsDir = getServletContext().getRealPath("/u"); // 获取文件夹路径
        String imageName = "image_" + System.currentTimeMillis() + ".jpg"; // 生成图片名称
        String imagePath = uploadsDir + File.separator + imageName; // 图片的完整路径

        // 写入文件
        try (OutputStream outputStream = new FileOutputStream(imagePath)) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
        }

        return "upimages/" + imageName; // 返回图片的相对路径
    }

}


img

  • 写回答

3条回答 默认 最新

  • svygh123 2024-06-08 15:52
    关注

    把imagePath打印一下看看,是否路径存在

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月17日
  • 已采纳回答 6月9日
  • 创建了问题 6月8日

悬赏问题

  • ¥15 惠普360g9的最新bios
  • ¥15 配置hadoop时start-all.sh老是启动失败
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题
  • ¥15 Fluent,液体进入旋转区域体积分数不连续