Я сделал 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? А есть ли лучший способ отправлять файлы?
Речь идет не только о предоставлении файлов, а также данных JSON ответа сервера (очевидно, через какой-то другой контекст).




Попробуйте добавить следующее, чтобы получить правильное имя файла для загрузки:
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üpYıldız Спасибо за вопрос! Я обновил свой ответ. Последний - получение правильного типа содержимого.
Почему бы не настроить sftp-сервер, если он просто предоставляет файлы для загрузки? Для целей чистой разработки вы также можете просто запустить http через веб-сервер python в месте расположения файлов (при условии, что сеть защищена / внутренняя) с помощью python3 -m http.server