Поток закрыт для StreamingOutput - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь написать построить ответ потокового вывода из входящего потока ввода, следующий мой код

public static void writeToResponse(final Response.ResponseBuilder response, final InputStream input, final String fileContentType, String fileName, final boolean isDownload, final boolean sanitizeXss) throws PreviewException {
    InputStream newInput;
    try {
        response.encoding(UTF_8);
        if (!StringUtils.isBlank(fileContentType)) {
            response.type(fileContentType);
        }
        if (isDownload) {
            if (fileName == null) fileName = "";
            response.header("Content-Disposition", "attachment; filename=\"" + fileName + '"');
        }
        if (logger.isDebugEnabled())
            logger.debug(String.format("Sanitize xss is = %b", sanitizeXss));
        if (sanitizeXss) {
            final String html = IOUtils.toString(input, UTF_8);
            IOUtils.closeQuietly(input);
            final String newHtml = XssUtils.cleanHtml(html);
            newInput = IOUtils.toInputStream(newHtml, UTF_8);
        } else {
            newInput = input;
        }
        final InputStream stream = newInput;
        response.entity((StreamingOutput) outputStream -> {
            try {
                IOUtils.copy(stream, outputStream);
            } finally {
                IOUtils.closeQuietly(stream);
            }
        });
    } catch (Exception ex) {
        throw new PreviewException(ex);
    }
}

Приведенный выше код работает, но если я закрою входящий поток ввода, он выдаст ошибку в IOUtils.copy (stream, outputStream) строка о том, что поток закрыт.

Код ошибки, как показано ниже ~ тот же код, что и выше

response.entity((StreamingOutput) outputStream -> {

                IOUtils.copy(stream, outputStream);

        });
    } catch (Exception ex) {
        throw new PreviewException(ex);
    } finally {
        IOUtils.closeQuietly(input);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...