Java 多次使用InputStream
我有一个视图,用户可以首先根据一些参数生成PDF,然后下载和/或通过邮件发送 现在,生成PDF文件的方法返回一个Java 多次使用InputStream,java,spring,vaadin,Java,Spring,Vaadin,我有一个视图,用户可以首先根据一些参数生成PDF,然后下载和/或通过邮件发送 现在,生成PDF文件的方法返回一个InputStream,然后将其存储为类的字段,如下所示: public class PDFWindow extends VerticalLayout { ... private InputStream pdfInputStream; ... private void createPDF() { this.pdfInputStream
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");
有没有办法停止关闭
InputStream
,然后手动关闭,或者我应该寻找一种完全不同的方法?只是不要将InputStream存储为字段
每次需要流时,请创建者创建流
如果太贵,则将生成的字节存储在内存中、文件中、数据库中或任何您想要的位置,并在需要时在这些字节/文件上创建流。只是不要将InputStream存储为字段 每次需要流时,请创建者创建流
如果费用太高,则将生成的字节存储在内存中、文件中、数据库中或任何您想要的地方,并在需要时在这些字节/文件上创建流。不要将InputStream存储为字段。每次需要流时,请创建者创建流。如果太贵,那么将生成的字节存储在内存中、文件中、数据库中或任何您想要的地方。非常感谢!我修改了它,将字节数组存储为一个字段,它工作得非常好。你可以发布一个答案,这样我就可以接受了吗?只是不要将InputStream存储为字段。每次需要流时,请创建者创建流。如果太贵,那么将生成的字节存储在内存中、文件中、数据库中或任何您想要的地方。非常感谢!我修改了它,将字节数组存储为一个字段,它工作得非常好。你能给我一个答复吗?这样我就可以接受了?