2015-05-30 4 views
2

Прошу прощения за мой английский. Я использую переводчик. Для Java существует код. Читает из базы данных поля PosgreSQL BYTEA двоичных данных и сохраняет его в файле:Как передать ссылку на файл с Java на xpages

<code> 
    public static void saveToFile() throws IOException { 
    try { 
    Connection conn = JdbcUtil.getConnection(FacesContext.getCurrentInstance(), "derby1"); 
      ResultSet rs = conn.createStatement().executeQuery(
          "SELECT files FROM test_goverment where who='d'"); 
      byte[] imgBytes = null; 
      if (rs != null) { 
       while (rs.next()) { 
        imgBytes = rs.getBytes(1); 
       } 
       FileOutputStream os = new FileOutputStream("c:\\samoutput.txt"); 
       os.write(imgBytes); 
       os.flush(); 
       os.close(); 
      } 
      rs.close(); 
      conn.close(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     enter code here} 
    } 
</code> 

Как передать файл для загрузки пользователя в XPages. И удалите его после загрузки.

ответ

1

Вы просто хотите передать результат запроса клиенту браузера для загрузки и не хотите его сохранять.

Вместо сохранения результата запроса в файл первого и передать его для загрузки позже
вы можете поток содержание прямой к ответ XPage в, как это:

public static void downloadFile() throws IOException { 
    try { 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     Connection conn = JdbcUtil.getConnection(facesContext, "derby1"); 
     ResultSet rs = conn.createStatement().executeQuery(
          "SELECT files FROM test_goverment where who='d'"); 
     byte[] imgBytes = null; 
     if (rs != null) { 
      while (rs.next()) { 
       imgBytes = rs.getBytes(1); 
      } 
      ExternalContext extCon = facesContext.getExternalContext(); 
      XspHttpServletResponse response = (XspHttpServletResponse)extCon.getResponse(); 
      response.reset(); 
      response.setContentType("text/plain"); 
      response.setHeader("Content-disposition", "attachment; filename=output.txt"); 
      response.setHeader("Cache-Control", "no-cache"); 
      OutputStream os = response.getOutputStream(); 
      os.write(imgBytes); 
      os.flush(); 
      facesContext.responseComplete(); 
      rs.close();    
     } 
     conn.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

Вы могли бы также посмотрите на это XSnippet. Он показывает вам, как представлять файлы для загрузки, если вы хотите/должны оставаться с файлами, а не просто потоками.

+0

спасибо. Оно работает.... – JohnLemon