2016-04-12 11 views
1

Ich möchte eine Datei hochladen und in der MySQL-Datenbank speichern. Bis jetzt bin ich in der Lage, die Datei hochzuladen, ihr Detail zu drucken. Wenn ich jedoch versuche, es über eine Hilfsklasse in der Datenbank zu speichern, wird alles außer der ID null. Können Sie einen Blick darauf werfen und lassen Sie mich wissen, was ich vermisse? Lassen Sie mich auch wissen, wenn Sie etwas sehen, das ich als Codeverbesserung ändern/ändern sollte.So speichern Sie hochgeladene Dateien als BLOB in mysql DB mit JSF und PrimeFaces

Hochladen der Datei mit JSF/Primefaces:

<h:form enctype="multipart/form-data"> 
    <p:growl id="messages" showDetail="true" /> 
    <p:fileUpload value="#{fileUploadView1.file}" mode="simple"/> 
    <p:commandButton value="Submit" ajax="false" actionListener="#{fileUploadView1.upload}" /> 
</h:form> 

FileBean:

@ManagedBean 
@SessionScoped 
public class FileUploadView1 { 

    private InputStream input; 
    private String fileName; 
    private Long fileSize; 
    private UploadedFile file; 
    @Inject 
    private FileController1 fileController; 

    public InputStream getInput() { 
     return input; 
    } 

    public String getFileName() { 
     return fileName; 
    } 

    public Long getFileSize() { 
     return fileSize; 
    } 

    public FileController1 getFileController() { 
     return fileController; 
    } 

    public UploadedFile getFile() { 
     return file; 
    } 

    public void setFile(UploadedFile file) { 
     this.file = file; 

     System.out.println("filesize " + file.getSize()); 
    } 

    public void upload() throws IOException { 

     if (file != null) { 
      FacesMessage message = new FacesMessage("Succesful", file.getFileName() + " is uploaded."); 
      FacesContext.getCurrentInstance().addMessage(null, message); 

      input = file.getInputstream(); 
      fileName = file.getFileName(); 
      fileSize = file.getSize(); 
      System.out.println("filesize3 " + file.getSize()); 
      fileController.uploadFile(file); 

     } 
    } 
} 

FileController:

@ManagedBean 
@SessionScoped 
public class FileController1 { 

    private FileDbUtil1 fileDbUtil; 
    private Logger logger = Logger.getLogger(getClass().getName()); 

    public FileController1() throws Exception { 

     fileDbUtil = FileDbUtil1.getInstance(); 
    } 
    public String uploadFile(UploadedFile theFile) { 

     logger.info("Uploading File: " + theFile); 

     try { 
      fileDbUtil.uploadFile(theFile); 
       } catch (Exception exc) { 
      logger.log(Level.SEVERE, "Error adding files", exc); 

      addErrorMessage(exc); 
      return null; 
     } 
     return "welcomePrimefaces"; 
    } 



     private void addErrorMessage(Exception exc) { 
     FacesMessage message = new FacesMessage("Error: " + exc.getMessage()); 
     FacesContext.getCurrentInstance().addMessage(null, message); 
    } 



} 

FileDbUtil Datei

public static FileDbUtil1 getInstance() throws Exception { 
     if (instance == null) { 
      instance = new FileDbUtil1(); 
     } 

     return instance; 
    } 

    private FileDbUtil1() throws Exception { 
     dataSource = getDataSource(); 
    } 

    private DataSource getDataSource() throws NamingException { 
     Context context = new InitialContext(); 

     DataSource theDataSource = (DataSource) context.lookup(jndiName); 

     return theDataSource; 
    } 

    public void uploadFile(UploadedFile theFile) throws Exception { 
     fileName = theFile.getFileName(); 
     input = theFile.getInputstream(); 


     Connection myConn = null; 
     PreparedStatement myStmt = null; 

     try { 
      myConn = getConnection(); 

      String sql = "insert into upload" 
        + "(name, file)" 
        + " values (?,?)"; 

      myStmt = myConn.prepareStatement(sql); 

      // set params 
      myStmt.setString(1, fileName); 
      myStmt.setBinaryStream(2, input); 

      myStmt.executeUpdate(); 
     } finally { 
      close(myConn, myStmt); 
     } 

    } 



    private Connection getConnection() throws Exception { 

     Connection theConn = dataSource.getConnection(); 

     return theConn; 
    } 

    private void close(Connection theConn, Statement theStmt) { 
     close(theConn, theStmt, null); 
    } 

    private void close(Connection theConn, Statement theStmt, ResultSet theRs) { 

     try { 
      if (theRs != null) { 
       theRs.close(); 
      } 

      if (theStmt != null) { 
       theStmt.close(); 
      } 

      if (theConn != null) { 
       theConn.close(); 
      } 

     } catch (Exception exc) { 
      exc.printStackTrace(); 
     } 
    } 
} 

Stack Trace: Beachten Sie, dass ich in der Lage bin, bevor die Dateigröße zu drucken, die Helfer-Klasse aufrufen

Info: filesize 3501 
Info: filesize3 3501 
Warning: java.lang.NullPointerException 
javax.el.ELException: java.lang.NullPointerException 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:293) 
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) 
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149) 
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:300) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException 
    at com.uploadfile.test.FileUploadView1.upload(FileUploadView1.java:70) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289) 
    ... 39 more 

FATAL: JSF1073: javax.faces.FacesException caught during processing of INVOKE_APPLICATION 5 : UIComponent-ClientId=, Message=java.lang.NullPointerException 
FATAL: java.lang.NullPointerException 
javax.faces.FacesException: java.lang.NullPointerException 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:89) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.el.ELException: java.lang.NullPointerException 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:293) 
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) 
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149) 
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:300) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    ... 31 more 
Caused by: java.lang.NullPointerException 
    at com.uploadfile.test.FileUploadView1.upload(FileUploadView1.java:70) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289) 
    ... 39 more 
+2

Es gibt in der Tat eine Menge Fehler, es braucht im Grunde eine vollständige Neufassung (ich schlage vor, die Grundlagen basierend auf einem anständigen Java/JSF/JavaEE Buch zu lernen). Aber der wichtigste Schritt, die Anweisung, eine Datei in der DB zu speichern, ist nirgends in dem bisher veröffentlichten Code sichtbar. Wo rufst du 'uploadFile()' an, um die Datei in DB zu speichern? Ich würde erwarten, dass es sofort innerhalb der 'fileUploadListener()' aufgerufen wird, wenn die Datei kommt. Aber es ist nirgends sichtbar. – BalusC

+0

Aktualisiert die Frage, Hinweis, dass ich den FileController aufrufen und die Hochgeladene Datei übergeben. Kannst du bitte einen Blick darauf werfen? – Moe

+1

Sorry, all diese Fehler haben bisher nichts mit "gespeicherte Datei in Datenbank speichern" zu tun. Außerdem fragst du dich im Grunde: "Warum bekomme ich eine NullPointerException?" anstelle von "Warum ist die Variable X null?", wobei auf die spezifische Variable hingewiesen wird. Dies zeigt kein minimales Verständnis von grundlegendem Java. Ich empfehle, das tiefe Java-EE-Loch zu crawlen, das Projekt für das zu lassen, was es ist, und ein paar Wochen damit zu verbringen, sorgfältig durch ein anständiges Java SE-Buch/Tutorial zu arbeiten. – BalusC

Antwort

1

Verursacht durch: java.lang.NullPointerException bei com.uploadfile.test.FileUploadView1.upload (FileUploadView1.java:68)

fileController wird nicht injiziert.

Verwenden Sie @Inject private FileController1 fileController.

BalusC ist direkt auf seinen Kommentar.

+0

Aktualisiert die Frage mit Ihrer Empfehlung. Ich habe immer noch eine Ausnahme von null, bitte sehen Sie sich den aktualisierten Stack an. – Moe