2016-04-12 13 views
1

Dosya yüklemek ve mysql veritabanına kaydetmek istiyorum. Şimdiye kadar, dosyayı yükleyebilirim, detaylarını yazdırabilirim. Ancak, veritabanında bir yardımcı sınıf aracılığıyla saklamak istediğimde, kimliği dışındaki her şey boş olur. Bir bakıp neyi kaçırdığımı bana bildirir misin? Ayrıca, kod geliştirmesi olarak değiştirmem/değiştirmem gereken bir şey görürseniz bana bildirin.Yüklenen Dosyaları mysql DB'de JSF ve PrimeFaces kullanarak Blob olarak nasıl depolanır

JSF/Primefaces kullanarak dosyası yükleme:

<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

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(); 
     } 
    } 
} 
Dosya

Yığın İzleme: (com.uploadfile.test.FileUploadView1.upload at java.lang.NullPointerException : yardımcı sınıf

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

Gerçekten çok fazla hata var, temel olarak tam bir yeniden yazma ihtiyacı var (Temelleri iyi bir Java/JSF/JavaEE kitabına dayanarak öğrenmenizi öneriyorum). Ama en önemli adım, dosyayı DB'ye kaydetme talimatı, şimdiye kadar yayınlanan kodlarda hiçbir yerde görünmez. Dosyayı DB'ye kaydetmek için 'uploadFile()' ı nereye çağırıyorsunuz? Dosya geldiğinde hemen 'fileUploadListener() 'içinde çağrıldığını görmeyi beklerdim. Fakat hiçbir yerde görünür değil. – BalusC

+0

Soruyu güncelleştirerek, FileController'ı çağırıp Yüklenen dosyayı iletiyorum. bir göz atabilir misin lütfen? – Moe

+1

Üzgünüz, şu ana kadar yapılan tüm bu hataların "veritabanında yüklenen dosyayı depola" ile bir alakası yok. Dahası, şu anda haklı olarak "Neden bir NullPointerException alıyorum?" Diye soruyorsunuz. "Değişken X null nedir?" yerine, belirli bir değişkene işaret eder. Bu temel Java'nın en az anlaşıldığını göstermez. Derin Java EE deliğini taramanızı, projenin ne olduğunu ve güzel bir Java SE kitabı/öğreticisi ile dikkatlice çalışmasını birkaç hafta geçirmenizi tavsiye ederim. – BalusC

cevap

1

çağırmadan önce ben dosya boyutunu baskı alabiliyorum unutmayın Neden Olduğu FileUploadView1.java:68)

fileController enjekte edilmiyor.

@Inject özel FileController1 dosyasını kullanınController.

BalusC, yorumu üzerine haklı.

+0

Soruyu önerilerinizle güncelledi. Hala boş bir istisna yaşıyorum, lütfen güncellenmiş yığına bakın. – Moe

İlgili konular