FileOutputStream到StreamedContent

时间:2016-02-19 13:42:12

标签: jsf primefaces download fileoutputstream

我正在使用Apache POI创建Excel文件,并且我将其保存到FileOutputStream

在XHTML中,我想用<p:fileDownload>下载此文件,但需要StreamedContent才能正常工作。

我想知道如何将FileOutputStream解析或投射到StreamedContent以使用PrimeFaces下载它。

2 个答案:

答案 0 :(得分:1)

以下是不将文件保存到磁盘的解决方案:

    HSSFWorkbook workbook = new HSSFWorkbook();

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    workbook.write(outputStream);

    InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
    StreamedContent streamedContent =  new DefaultStreamedContent(inputStream, "application/xls", "output.xls");

答案 1 :(得分:-2)

我必须将文件保存到磁盘中,稍后再使用文件类型将其保存到StreamedContent中。

代码:

HSSFWorkbook libro = new HSSFWorkbook();
FileOutputStream elFichero = new FileOutputStream("c:/Temp/MyExcel.xls");
        libro.write(elFichero);
        elFichero.close();
        libro.close();
        File fil = new File("c:/Temp/MyExcel.xls");
        StreamedContent excel = new DefaultStreamedContent(new FileInputStream(fil), new MimetypesFileTypeMap().getContentType(fil), "MyExcel.xls"));

稍后我可以通过<p:commandButton>获取我的Excel文件。

无论如何我在寻找一种方法,在下载之前尽量不将它保存到磁盘......