Пробелы и некоторые другие символы не очень хорошо переносятся в URL.Вам необходимо экранировать или закодировать их, измените код
URL url = new URL(baseUrl + downloadFileName);
На:
URL url = new URL(baseUrl + URLEncoder.encode(downloadFileName, StandardCharsets.UTF_8.name());
Это должно решить вашу проблему.Кроме того, есть библиотеки с открытым исходным кодом, которые решают вашу проблему для вас.См. Apache commons , который является популярным решением.Другое решение - библиотека MgntUtils (версия 1.5.0.2).Он содержит класс HttpClient
, который позволяет вам делать вещи очень просто:
httpClient.sendHttpRequestForBinaryResponse(baseUrl + URLEncoder.encode(downloadFileName, StandardCharsets.UTF_8.name()", HttpClient.HttpMethod.POST);
Возвращает ByteBuffer, который содержит ответ в виде необработанных байтов.Этот же класс имеет метод sendHttpRequest
для получения текстового ответа.Оба метода выдают IOException
в случае сбоя.Вот ссылка на статью, в которой объясняется, где взять библиотеку MgntUtils , а также какие у нее есть утилиты.В статье класс HttpClient
не упоминается (это новая функция), но библиотека поставляется с хорошо написанным Javadoc.Так что ищите javadoc для класса HttpClient в этой библиотеке.