在数据库中上传图片时如何解决 NullPointerException?

How to fix NullPointerException when uploading picture in database?

我想上传数据库中的图片,这是我的jsp:

    <body>
    <form action="addbooka" method="POST" enctype="multipart/form-data">
        Title:<input type="text" value="${title}" name="title"> <br>
        Description: <input type="text" value="${description}" name="description"><br>
        Price: <input type="text" value="${price}" name="price"><br>
        Picture: <input type="file" name="myimg"><br>
        <button type="submit">Add</button>          
    </form>       
</body>

这是我 insert 图片的方法:

public static void insertImage(String myImage) throws Exception {
    try {
        String insertImage = ("insert into image(image) values(?)");
        PreparedStatement ps = DataBaseConnection.get().prepareStatement(insertImage);           
        File file = new File(myImage);                     
        InputStream in = new FileInputStream(file);
        ps.setBlob(1, in);
        ps.executeUpdate();

在 servlet 中,我只是调用此方法并将 request.getParameter("myimg") 作为参数(输入标签)传递。 经过一些研究,我认为我收到此错误是因为我没有将 boundary 放入 form 标记中。但是我不知道要输入什么数字,下一步该做什么,还是因为边界或其他原因真的出错了?

在您的 servlet 中不要忘记放置 @MultipartConfig annotation.Also ,您正在将字符串传递给您的方法而不是 Part 。即:

  int row=0;
  InputStream inputStream = null; // input stream of the upload file
  // obtains the upload file part in this multipart request
    Part filePart = request.getPart("myimg");//get image
    insertImage(filePart)//pass to method

 public static void insertImage(Part filePart) throws Exception {
      String insertImage = ("insert into image(image) values(?)");
    PreparedStatement ps = DataBaseConnection.get().prepareStatement(insertImage); 
    if (filePart != null) {
      
        // obtains input stream of the upload file
        inputStream = filePart.getInputStream();
      
    }
   if (inputStream != null) {
            // fetches input stream of the upload file for the blob column
            ps.setBlob(1, inputStream);
    }
    row = ps.executeUpdate();
        if (row > 0) {
  out.println("done")

     }
  }