java.lang.NullPointerException при обработке загрузки файла - PullRequest
0 голосов
/ 17 февраля 2012

Буду очень признателен, если вы сможете найти, где моя проблема и как я могу ее исправить. (Java.lang.NullPointerException)

вот мой HTML, откуда я получаю текстовое поле, и я загружаю 2 файла

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Insert title here</title>
    </head>
    <body>
    <h3>File Upload:</h3>
    <form action="UploadServlet" method="post"
                            enctype="multipart/form-data">
    <br><br><br><br><br>
    Insert your ID (marca) - ex: 101358 
    <br>
    <input type="text" name="rid" size="40" />
    <br><br>
    Browse your files:
    <br>
    <input type="file" name="file" size="30" />
    <br />
    <br/>
    <input type="file" name="file" size="30" />
    <br />
    <br>
    <input type="submit" value="Upload File" />
    </form>
    </body>
    </html>

в этом сервлете я сохраняю загруженные файлы в определенную папку, и после этого я подключаюсь к базе данных, в которой хочу сохранить строку, полученную из HTML, и пути к файлам из загруженных файлов

UploadServlet.java

public class UploadServlet extends HttpServlet {

  /**
   * 
   */
  private static final long serialVersionUID = 1L;
  private boolean isMultipart;
  private String filePath;
  private int maxFileSize = 50 * 1024;
  private int maxMemSize = 4 * 1024;
  private File file ;

  public void init( ){
    // Get the file location where it would be stored.
    filePath = getServletContext().getInitParameter("file-upload"); 
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, java.io.IOException {
    // Check that we have a file upload request
    isMultipart = ServletFileUpload.isMultipartContent(request);
    response.setContentType("text/html");
    java.io.PrintWriter out = response.getWriter( );
    if( !isMultipart ){
      out.println("<html>");
      out.println("<head>");
      out.println("<title>Servlet upload</title>");  
      out.println("</head>");
      out.println("<body>");
      out.println("<p>No file uploaded</p>"); 
      out.println("</body>");
      out.println("</html>");
      return;
    }
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // maximum size that will be stored in memory
    factory.setSizeThreshold(maxMemSize);
    // Location to save data that is larger than maxMemSize.
    factory.setRepository(new File("c:\\temp"));

    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
    // maximum file size to be uploaded.
    upload.setSizeMax( maxFileSize );

    try{ 
      // Parse the request to get file items.
      List fileItems = upload.parseRequest(request);

      // Process the uploaded file items
      Iterator i = fileItems.iterator();

      out.println("<html>");
      out.println("<head>");
      out.println("<title>Servlet upload</title>");  
      out.println("</head>");
      out.println("<body>");
      //while ( i.hasNext () ) 
      //{
      FileItem fi = (FileItem)i.next();
      if ( !fi.isFormField () )  
        {
          // Get the uploaded file parameters
          //String fieldName = fi.getFieldName();
          String fileName = fi.getName();
          //String contentType = fi.getContentType();
          //boolean isInMemory = fi.isInMemory();
          //long sizeInBytes = fi.getSize();
          // Write the file
          if( fileName.lastIndexOf("\\") >= 0 ){
            file = new File( "C:/UploadedFiles/" + fileName.substring( fileName.lastIndexOf("\\"))) ;
          }else{
            file = new File( "C:/UploadedFiles/" + fileName.substring(fileName.lastIndexOf("\\")+1)) ;
          }
          fi.write( file ) ;
          out.println("Uploaded Filename: " + fileName + " --- saved in C:/UploadedFiles/ " + "<br>");
        }

      FileItem fi2 = (FileItem)i.next();
      if ( !fi2.isFormField () ) 
        {
          // Get the uploaded file parameters
          //String fieldName2 = fi2.getFieldName();
          String fileName2 = fi2.getName();
          //String contentType2 = fi2.getContentType();

          //boolean isInMemory = fi2.isInMemory();
          //long sizeInBytes = fi2.getSize();
          // Write the file
          if( fileName2.lastIndexOf("\\") >= 0 ){
            file = new File( "C:/UploadedFiles/" + fileName2.substring( fileName2.lastIndexOf("\\"))) ;
          }else{
            file = new File( "C:/UploadedFiles/" + fileName2.substring(fileName2.lastIndexOf("\\")+1)) ;
          }
          fi2.write( file ) ;
          out.println("Uploaded Filename: " + fileName2 + " --- saved in C:/UploadedFiles/ " + "<br>");       
        }

      //}
      out.println("</body>");
      out.println("</html>");     
      String idmarca = request.getParameter("rid");

      String itemName1 = fi.getName();
      String path1 = new String("C:\\UploadedFiles\\" + itemName1.substring(itemName1.lastIndexOf("\\")));

      String itemName2 = fi2.getName();
      String path2 = new String("C:\\UploadedFiles\\" + itemName2.substring(itemName2.lastIndexOf("\\")));
      Connection con = null;
      PreparedStatement ps; 

      try{      
        String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
        Class.forName(driver);
        String db = "jdbc:odbc:upload";
        con = DriverManager.getConnection(db, "", "");  
        String sql = "INSERT INTO file1(marca,file1,file2) VALUES(?, ?, ?)";            
        ps = con.prepareStatement(sql);              

        ps.setString(1, idmarca);
        ps.setString(2, path1);
        ps.setString(3, path2);
        int s = ps.executeUpdate();
        if(s>0){
          System.out.println("Uploaded successfully !");
        }
        else{
          System.out.println("Error!");
        }

      }
      catch(Exception e){
        e.printStackTrace();
      }
      finally {
        // close all the connections.
        //ps.close();
        //con.close();
      }
    }catch(Exception ex) {
      ex.printStackTrace();
    }  
  }   


  public void doGet(HttpServletRequest request, 
                    HttpServletResponse response)
    throws ServletException, java.io.IOException {

    throw new ServletException("GET method used with " + getClass( ).getName( )+": POST method required.");
  } 
}

java.lang.NullPointerException
    at UploadServlet.doPost(UploadServlet.java:126)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)

1 Ответ

2 голосов
/ 17 февраля 2012

ОК, моя проблема в строке String idmarca = request.getParameter ("rid");он получает текст из текстового поля html.Перед добавлением этого текстового поля я смог сохранить пути к файлам загруженных файлов.

При использовании multipart/form-data запросов, данные формы имеют вид , а не , доступные какзапросить параметры по request.getParameter().Они доступны только как части данных формы по request.getPart().Но так как вы используете Apache Commons FileUpload (возможно, вы еще не используете новую версию Servlet 3.0, в которой доступен метод getPart()), то вам действительно следует использовать тот же API для получения значения текстового поля.

Продолжить итерацию fileItems.Здесь есть текстовое поле.

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...