Java - отправка файла через HTTP-сервер

Я сделал HTML-сервер, используя библиотеку com.sun.net.httpserver. Я хочу отправить клиенту файл jar, чтобы он его загрузил.

Этот метод ниже фактически заставляет клиента загружать файл:

@Override
public void handle(HttpExchange httpExchange) {
    File file = new File("Test.jar");
    try {
        httpExchange.sendResponseHeaders(200, file.length());
        OutputStream outputStream = httpExchange.getResponseBody();
        Files.copy(file.toPath(), outputStream);
        outputStream.close();
    } catch (IOException exception) {
        exception.printStackTrace();
    }
}

но он отправляет файл jar в виде zip-архива. Как мне заставить его отправить его как файл jar? А есть ли лучший способ отправлять файлы?

Почему бы не настроить sftp-сервер, если он просто предоставляет файлы для загрузки? Для целей чистой разработки вы также можете просто запустить http через веб-сервер python в месте расположения файлов (при условии, что сеть защищена / внутренняя) с помощью python3 -m http.server

Aydin K. 30.03.2021 20:15

Речь идет не только о предоставлении файлов, а также данных JSON ответа сервера (очевидно, через какой-то другой контекст).

Eyüp Yıldız 30.03.2021 20:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте добавить следующее, чтобы получить правильное имя файла для загрузки:

httpExchange.getResponseHeaders().add("Content-Disposition", "attachment; filename=Test.jar");

Вы также можете добавить следующее, чтобы получить соответствующий Тип содержимого:

httpExchange.setAttribute(HTTPExchange.HeaderFields.Content_Type.toString(), "application/java-archive");

Пожалуйста, смотрите https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types для получения списка типов контента для различных суффиксов.

добавление Content-Disposition исправило это, спасибо. Но просто любопытно, что делает эта вторая часть? Работает без добавления

Eyüp Yıldız 30.03.2021 22:41

@ EyüpYıldız Спасибо за вопрос! Я обновил свой ответ. Последний - получение правильного типа содержимого.

Kaj Hejer 31.03.2021 08:42

Другие вопросы по теме