Вопрос по java, jersey – Возврат файла с использованием Java Jersey

21

Я использую Java-Джерси для реализации службы REST. Одна вещь, которую должен предоставить мой сервис - это опция загрузки файла. Эти файлы довольно большие и построены из данных из базы данных.

В настоящее время я выбираю все данные из БД, сохраняю их в файл и возвращаю

Response.ok().entity(new FileInputStream(file)).build();

Есть ли способ, как я могу начать обслуживание файла без полной загрузки данных из БД, но, как данные поступают из БД, добавить его в поток вывода?

Увидетьstackoverflow.com/questions/3496209/...Этот ответ также полезен для этого. centic

Ваш Ответ

4   ответа
0

если у вас есть доступ к уровню JDBC (например, с помощью Hibernate), должна быть возможность потоковой передачи данных с помощью API потоковой передачи JDBC, затем взять потоки из ResultSet и передать их в ответ Джерси. Builder. Я сам этого не делал ..

проверьте здесь:

GetBinaryStream () JDBC

Пример

7

Как насчет

File fileToSend = getFile();
return Response.ok(fileToSend, "application/zip").build();

Тип носителя может быть установлен в соответствии с отправляемым файлом.

Это выглядит довольно просто, но, что более важно, эксперты по Java, читающие это, видят проблему с производительностью решения?

Да, это сработало для меня. nishantkyal
Это не для меня, это действительно вернул fileName. Yassine Badache
Вы действительно пробовали это? Я ожидаю, что это просто вернет имя файла в виде строки, а не содержимое файла ... centic
0

Я не уверен, что это даже возможно.

Но вам не нужно писать временный файл для отправки ваших данных. Вместо записи в файл, вы можете использоватьByteArrayInputStream и поместите свои данные туда с байтовым массивом.

Да, я хочу что-то вроде new InputStream (new MyDBWrapper ()), где MyDBWrapper будет выполнять выборку и форматирование данных. Я не уверен, что могу использовать ByteInputStream, так как данные достаточно большие - могут получить более 1 ГБ. digy

Похожие вопросы