2015-08-09 2 views
0

У меня есть веб-приложение, которое использует компоненты PrimeFaces. Я пытаюсь загрузить файл из базы данных для сохранения на клиентский компьютер someones. В коде я пишу массив байтов к файлу, показанному ниже. Однако я не знаю, как вызвать диалоговую панель загрузки при срабатывании функции. Кто-то может помочь?Загрузка файла изображения с использованием PrimeFaces

Скачать функция загрузки боба

public void fileDownload(int id) throws IOException { 

    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     DBConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demeter2.0", "root", "root"); 
    } catch (SQLException | ClassNotFoundException ex) { 
     Logger.getLogger(Animal.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    PreparedStatement pst = null; 

    try { 
     if (DBConn != null) { 
      String sql = "Select * FROM graph WHERE id='" + id + "'"; 
      pst = (PreparedStatement) DBConn.prepareStatement(sql); 
      ResultSet rs = pst.executeQuery(); 

      if (!rs.next()) { 
      } else { 
       rs.beforeFirst(); 

       while (rs.next()) { 
        // File file = new File("c:/newfile.png"); 
        Blob b = rs.getBlob(2); 
        byte barr[] = new byte[(int) b.length()]; 
        barr = b.getBytes(1, (int) b.length()); 
        InputStream is = new ByteArrayInputStream(barr); 
        System.out.print("hello"); 
        file = new DefaultStreamedContent(is, "image/png", "chart.png"); 
        System.out.print(file); 
       }//end while 
      } 
     } 
    } catch (Exception e) { 
     System.out.println(e); 
    } finally { 
     try { 
      pst.close(); 
      DBConn.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

download.xhtml

<h:form> 
    <p:dataTable var="download" value="#{download.allGraph()}"> 
     <p:column headerText="Id"> 
      <h:outputText value="#{download.id}" /> 
     </p:column> 

     <p:column headerText="Date Added"> 
      <h:outputText value="#{download.date}" /> 
     </p:column> 

     <p:column headerText="Download"> 
      <p:commandLink id="downloadLink" value="Download" ajax="false"> 
       <p:fileDownload value="#{download.fileDownload(download.id)}" /> 
      </p:commandLink> 
     </p:column> 
    </p:dataTable> 
</h:form> 

ответ

1

Если вы внимательно посмотрите на showcase вы увидите, что вам нужно вызвать функцию, которая возвращает StreamedContent. Вы можете сменить свою функцию с void на StreamedContent и в конце добавить return file;

+0

Аха, хорошо заметили, спасибо вам большое! –

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