Передать outputtream в javax.ws.rs.core.ResponseBuilder - PullRequest
0 голосов
/ 18 февраля 2020

Мой вопрос, если / как я могу передать OutputStream объекту ответа в Jax-rs. Вот мое (немного неструктурированное) описание моей текущей настройки:

У меня есть служба REST на основе Java (основанная на расширенной реализации Java Jax-rs). Доступ к API осуществляется через веб-браузер, и в бэкэнде есть какая-то служба, которая генерирует OutputStream . Результат этого OutputStream предлагается в виде загрузки файла. Для передачи данных из OutputStream в браузер я сохраняю выходные данные OutputStream в файловой системе, а затем использую ResponsBuilder и StreamingOutput для передачи данных в браузер. / пользователь. Создание файла - это то, чего я хочу избежать (на самом деле без особой причины - я просто думаю, что лучше избегать создания файла ...). Вот код, который передает созданный файл в построитель ответов и впоследствии удаляет его:

// <SNIP>
StreamingOutput fileStream = new StreamingOutput() {
                @Override
                public void write(OutputStream output) throws IOException, WebApplicationException {
                    try {
                        Files.copy(exportedFile.toPath(), output);
                    } catch (NoSuchFileException e) {
                        logger.error("An exception (NoSuchFile) occured. MESSAGE=" + e.getMessage());
                    }
                    finally {
                        Files.delete(exportedFile.toPath());
                    }
                }
            };

response = Response.ok( fileStream , MediaType.APPLICATION_OCTET_STREAM )
                    .header("content-disposition","attachment; filename = download.dat"))
                    .build();

return response;
// <SNIP>

1 Ответ

0 голосов
/ 20 февраля 2020

Несмотря на то, что я каким-то образом был зафиксирован на решении, которое звучит так: «Эй, ответьте, вот ваш выходной поток. Пожалуйста, передайте его пользователю и не забудьте закрыть поток позже», похоже, нет никаких проблем с выполнением

StreamingOutput fileStream = new StreamingOutput() {
            @Override
            public void write(OutputStream output) throws IOException, WebApplicationException {

                myResult.write(output);
                myResult.close();

            }

        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...