多次使用InputStream

时间:2018-07-06 08:48:54

标签: java spring vaadin

我有一个视图,用户可以根据该视图首先根据某些参数生成PDF,然后通过邮件下载和/或发送它。

现在,生成PDF文件的方法将返回JTable,然后将其存储为类的字段,如下所示:

InputStream

我的问题是public class PDFWindow extends VerticalLayout { ... private InputStream pdfInputStream; ... private void createPDF() { this.pdfInputStream = pdfCreator.createPDF(); } pdfInputStream消耗后关闭:

FileDownloader

或我写的Button download = new Button("Download"); final FileDownloader fileDownloader = new FileDownloader( new StreamResource(() -> this.pdfInputStream, this.pdfFileName)); fileDownloader.extend(download);

SpringEmailService

有什么方法可以阻止SpringEmailService.send( "test@mail.com", recipients, this.subject.getValue(), this.message.getValue(),this.pdfInputStream,"test.pdf", "application/pdf"); 处于关闭状态,然后手动关闭它,还是我应该寻找一种完全不同的方式?

1 个答案:

答案 0 :(得分:3)

仅不要将InputStream存储为字段。

请创建者在每次需要流时创建流。

如果价格太昂贵,则将生成的字节存储在内存,文件中,数据库中或所需的任何位置,并在需要时在这些字节/文件上创建流。