1

I'm trying to upload an image to MySQL database using JSP. but it ends with a file not found exception. how do I fix this? Servlet file, exception and table are down there .......................................................................................................................................................... table

package com.imageUpload.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.imageUpload.utill.DbConnection;


@WebServlet("/ImageUpload")
public class ImageUpload extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name=request.getParameter("name");
        String image=request.getParameter("image");

        FileInputStream fis=new FileInputStream(new File(image));

        Connection con=DbConnection.getConnection();
        try {   
        PreparedStatement ps=con.prepareStatement
            ("insert into image(name,image)values(?,?)");
        ps.setString(1,name);
        ps.setBinaryStream(3, fis);
        int n = ps.executeUpdate();
        if(n>0) {
            response.getWriter().println("Successfully Uploaded!");
        }

        }catch(Exception e) {System.out.println("Image E: "+e);}
    }


}

Type Exception Report

Message WS_Logo-02 (1).jpg (The system cannot find the file specified)

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

java.io.FileNotFoundException: WS_Logo-02 (1).jpg (The system cannot find the file specified)
    java.io.FileInputStream.open0(Native Method)
    java.io.FileInputStream.open(FileInputStream.java:195)
    java.io.FileInputStream.<init>(FileInputStream.java:138)
    com.imageUpload.controller.ImageUpload.doPost(ImageUpload.java:27)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Yasiru
  • 13
  • 1
  • 1
  • 7

1 Answers1

2

The method request.getParameter() will return you the String, But to get the actual image you need to get the file part input stream. Then by using the part you can create the image on your server and further can store it in the database as binary. The most efficient way is to store all your files in external storage like an S3 bucket and store the path in the database. You can try the below code.

package com.imageUpload.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.imageUpload.utill.DbConnection;


@WebServlet("/ImageUpload")
@MultipartConfig
public class ImageUpload extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name=request.getParameter("name");

        InputStream uploadedInputStream = null;
        Part filePart = null;
        String image = "";
        filePart = request.getPart("image"); // Retrieves <input type="file" name="image">
            if (filePart != null) {
                image = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); //image->name
                uploadedInputStream = filePart.getInputStream();
            }

        FileInputStream fis=new FileInputStream(new File(image));

        Connection con=DbConnection.getConnection();
        try {   
        PreparedStatement ps=con.prepareStatement
            ("insert into image(name,image)values(?,?)");
        ps.setString(1,name);
        ps.setBinaryStream(3, fis);
        int n = ps.executeUpdate();
        if(n>0) {
            response.getWriter().println("Successfully Uploaded!");
        }

        }catch(Exception e) {System.out.println("Image E: "+e);}
    }
}
Onkar Musale
  • 909
  • 10
  • 25