Копировать InputStream в response.getOutputStream () с IOUtils.copyLarge () работает для размера до 60 КБ, но не удается для размера> 60 КБ при java весенней загрузке - PullRequest
0 голосов
/ 20 января 2020

Чтобы преобразовать html в pdf, я использую команду wkhtmltopdf в java весенней загрузке.

Я беру входной поток из процесса с помощью

InputStream inputStream = process.getInputStream();

, а затем копирую весь входной поток в ответный выходной поток с apache общими утилитами и flu sh буфером ответов

IOUtils.copyLarge(inputStream, response.getOutputStream());
response.flushBuffer();

и, наконец, уничтожением процесса.

Но когда я выбираю записи размером до 4500, значит, размером до 60 КБ, тогда это работает хорошо.

Но когда я выбираю запись больше чем 4500, то есть размер> 60K, система зависает на

IOUtils.copyLarge(inputStream, response.getOutputStream()); 

и в сетевой консоли браузера, статус ожидает бесконечно без ответа.

Мой код указан ниже.

Process process = Runtime.getRuntime().exec("wkhtmltopdf --debug-javascript -s A4 -L 0mm -R 0mm -T 28mm -B 10mm --header-html header.html --footer-html footer.html htmlFile.html -");

process.waitFor(5, TimeUnit.SECONDS);

response.setContentType("application/pdf");

try (OutputStream outputStream = process.getOutputStream(); InputStream inputStream = process.getInputStream();) {

    IOUtils.copyLarge(inputStream, response.getOutputStream());

    response.flushBuffer();

} finally {

    process.destroy();
}

Как скопировать большой входной поток в response.getOutputStream ()?

Я также пытался использовать,

(1) inputStream .transferTo (response.getOutputStream ()), затем

(2) StreamUtils.copy (inputStream, response.getOutputStream ());

но не получите ответ.

...