2014-09-05 5 views
2

Я пытаюсь загрузить файл, но по пути я получаю исключение NullPointerException.Исключение части null-указателя

Ошибка я получаю

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

на этой линии:

InputStream is = part.getInputStream(); 

Вот код для сервлетов и JSP-страницы.

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> 

Я надеюсь, что вы, ребята, можете Хель p меня исправить это.

Благодаря

+2

Вы уверены, что 'request.getPart (" file ");' возвращает что-то отличное от нуля? Можете ли вы добавить строку в свой код, чтобы проверить ее перед продолжением? – csmckelvey

+0

Когда я использую part.getName(), он возвращает «файл», и когда я использую toString(), он возвращает длинную строку. –

+0

Если вы отправляете форму без выбора файла, getPart возвращает null, поэтому вам все равно придется обрабатывать эту ошибку пользователя. –

ответ

0

Я думаю, что это может помочь: https://coderanch.com/t/618813/Null-Pointer-Exception-request-getPart Короче говоря, вам нужно добавить Multipartsconfig аннотацию. По крайней мере, в моем случае тропа ушла.

+1

Почему _in brief_? Я могу дать более полное объяснение, во что бы то ни стало, сделайте это! –

+0

Эта аннотация @multipartsconfig позволяет настроить наш сервлет, чтобы ожидать запросы типа MIME с несколькими данными/формами данных. См .: http://docs.oracle.com/javaee/6/tutorial/doc/glrbb.html. –

Смежные вопросы