Да, это возможно. Вот как работает загрузка файла.
Сначала вам нужно установить Content-Type
, который вы собираетесь предоставить. Если это простой двоичный файл, установите его как application/octet-stream
. После этого получите outputStream
ответа и дампируйте содержимое файла в нем.
Как ниже
response.setContentType("application/octet-stream");
response.setContentLength(fileSizeInBytes);//new File('myfile').length(), optional step
response.getOutputStream().write(fileBytes);//do it in chunks
#edit
Потоки концы каналов передачи данных. Как и HTTP-адрес, это конечная точка ресурса сервера.
В случае потока наша программа не обязательно должна знать, где находится фактический ресурс. Мне просто нужно знать, как взаимодействовать с потоком.
Так что в случае HttpServletResponse
поток, данные лежат на вашем сервере. Клиентский браузер (или любой другой клиент) устанавливает соединение с вашим сервером. Когда мы вызываем методы в потоке, такие как чтение/запись, данные по этому соединению отправляются или принимаются. Эти вызовы в случае HttpServletResponse
приводят к передаче пакетов HTTP по TCP-соединению.
Для получения дополнительной информации о Java Stream (или любом другом языке с аналогичной концепцией) проверьте здесь.
https://docs.oracle.com/javase/tutorial/essential/io/streams.html
Вы не "отправить" выходной поток. Сервер записывает байты в свой поток ответа HTTP-ответа, так что клиент может принимать байты во входном потоке своего соединения. Выходной поток похож на клавиатуру: вы используете ее для записи вещей. InputStream похож на экран: вы используете его для чтения вещей. Но вы не посылаете клавиатуру кому-то, чтобы что-то сказать. Вы вводите его на клавиатуре. –
Большое спасибо JB Nizet :) Хотя мы имеем переменные (разных типов данных) для чтения/записи данных в памяти, то почему мы идем для потоков? Пожалуйста, помогите мне это знать. – lsof
Поток редко используется для записи вещей в память. В основном он используется для записи вещей на диск или в сеть. Если у вас есть два сервера, даже на одном компьютере, они не используют одну и ту же память. Переменная, хранящаяся в одном процессе, недоступна из другого процесса. Поэтому вам нужно общаться между ними, отправляя сообщения по сети. Чтобы продолжить метафоры: вы можете написать заметку о почте для своей жены, которая живет в вашем доме. Но чтобы что-то мне рассказать, вам нужно отправлять сообщения по сети. –