2

I am trying to upload a file but I get a NullPointerException along the way.

The error I am getting is

SEVERE:   java.lang.NullPointerException at servlet.UploadServlet.doPost(UploadServlet.java:36)

on this line:

InputStream is = part.getInputStream();

Here is the code for servlet and jsp page.

UploadServlet

    @MultipartConfig(fileSizeThreshold = 1024 * 1024 * 10, maxFileSize = 1024 * 1024 * 50, maxRequestSize = 1024 * 1024 * 50)

public class UploadServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {

            Part part = request.getPart("file");
            InputStream is = part.getInputStream();

            String filename = getFileName(part);
            String relativeWebPath = "/WEB-INF/uploads";
            String absoluteFilePath = getServletContext().getRealPath(relativeWebPath);
            File uploadedFile = new File(absoluteFilePath, filename);

            FileOutputStream os = new FileOutputStream(uploadedFile);

            int i = is.read();
            while (i != -1) {
                os.write(i);
                i = is.read();
            }
            os.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            out.close();
        }
    }

    private String getFileName(Part part) {
        for (String cd : part.getHeader("content-disposition").split(";")) {
            if (cd.trim().startsWith("filename")) {
                String filename = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
                return filename.substring(filename.lastIndexOf('/') + 1).substring(filename.lastIndexOf('\\') + 1);
            }
        }
        return null;
    }
}

upload.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <title>MobMel::Upload</title>
    </head>
    <body>
        <form action="UploadServlet" method="post" enctype="multipart/form-data">
            <table class="upload">
                <tr>
                    <td>File</td> 
                    <td><input type="file" name="file"></td>
                </tr>
                <tr>
                    <td></td> 
                    <td><input type="submit" value="Upload"></td>
                </tr>
            </table>
        </form>
    </body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <servlet>
        <servlet-name>RegisterServlet</servlet-name>
        <servlet-class>servlet.RegisterServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>ProfileServlet</servlet-name>
        <servlet-class>servlet.ProfileServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>servlet.UploadServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RegisterServlet</servlet-name>
        <url-pattern>/RegisterServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ProfileServlet</servlet-name>
        <url-pattern>/ProfileServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>UploadServlet</servlet-name>
        <url-pattern>/UploadServlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

I hope you guys can help me fix this.

Thanks

kenju
  • 5,866
  • 1
  • 41
  • 41
OhWell...
  • 37
  • 8

1 Answers1

0

I think this may help: https://coderanch.com/t/618813/Null-Pointer-Exception-request-getPart In brief, you need to add Multipartsconfig annotation. At least in my case the troble has gone.