POI - сохранить экспортированный файл клиенту - PullRequest
3 голосов
/ 13 декабря 2011

Я экспортирую dataTable (связывание dataList) в файл Excel, вызывая следующий метод на xlsWorkBookPrepare("c:\\export.xls");

Часть метода:

public void xlsWorkBookPrepare(String file) throws IOException
{
  /* prepare of workbook */
  Workbook wb = new HSSFWorkbook();
  Map<String, CellStyle> styles = Style.createStyles(wb);
  ... 

  for (FoodList item : dataList)
  { 
    ...
  }  

  /* create file */
  FileOutputStream fileOut;
  try 
  {
    fileOut = new FileOutputStream(file);
    wb.write(fileOut);
    fileOut.flush();
    fileOut.close();
  } 
  catch (FileNotFoundException e) 
  {
    e.printStackTrace();
  }  
}

Нопуть связан с сервером.Как сохранить его на стороне клиента ??

РЕШЕНИЕ (на основе ответа Ранги Лин):

HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
res.setContentType("application/vnd.ms-excel");  
res.setHeader("Content-disposition",  "attachment; filename=test.xls"); 

try 
{
  ServletOutputStream fileOut = res.getOutputStream();
  wb.write(fileOut);
  fileOut.flush();
  fileOut.close();
} 
catch (FileNotFoundException e) 
{
  e.printStackTrace();
}  
FacesContext faces = FacesContext.getCurrentInstance();  
faces.responseComplete(); 

1 Ответ

8 голосов
/ 13 декабря 2011

Если я правильно понял, вам нужно передать файл обратно клиенту через http.Вместо FileOutputStream вы можете использовать метод getOutputStream() в HttpServletResponse.

Код должен выглядеть следующим образом:

String fileName = "excel.xls";
HttpServletResponse response = getResponse(); // get ServletResponse
response.setContentType("application/vnd.ms-excel"); // Set up mime type
response.addHeader("Content-Disposition", "attachment; filename=" + fileName);
OutputStream out = response.getOutputStream()
wb.write(out);
out.flush();

Примечание. Я не проверял его, но выдолжен быть в состоянии понять идею.

...