Использовать InputStream несколько раз - PullRequest
0 голосов
/ 06 июля 2018

У меня есть вид, из которого пользователь может сначала создать PDF-файл в зависимости от некоторых параметров, а затем загрузить и / или отправить его по почте.

Теперь метод генерации PDF-файла возвращает 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 и затем закрыть его вручную, или я должен искать совершенно другой путь?

1 Ответ

0 голосов
/ 06 июля 2018

Только не сохраняйте InputStream как поле.

Попросите создателя создавать поток каждый раз, когда он вам нужен.

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

...