Как настроить мой запрос Http Post для обработки большого размера элемента (отправляется большой файл). Я читаю локальный файл, а затем кодирую его с помощью Base64 и устанавливаю содержимое в качестве тела запроса после публикации. Это отправляется в микросервис, который позаботится об этом дальше. Проблема, с которой я сталкиваюсь, заключается в том, что когда файл маленький, проблем нет, но когда он большой, я получаю исключение
java.io.IOException: An existing connection was forcibly closed by the remote host
Исключение не меняется, когда я запускаю микросервис локально, как Spring приложение, или как в контейнере на kubernetes / rancher
Есть ли способ настроить размер сообщения? Даже если невозможно отправить неограниченное содержимое, мне все равно нужно иметь возможность «перехватить» слишком большое содержимое и сообщить об этом клиенту.
Локальный файл читается так:
//ftpRequest is an object that contains the fileContent encoded as string, AND some other fields
// need for the server side business.
String ftpRequestJson = ftpRequest.toJsonString() ;
FileInputStream fis;
try {
fis = new FileInputStream(new File(fileName) );
byte[] content = IOUtils.toByteArray(fis) ;
String encodedContent = Base64.getEncoder().encodeToString(content) ;
return encodedContent ;
} catch (FileNotFoundException e) {
throw e ;
}
catch (IOException e) {
throw e ;
}
, а затем отправляется запрос HttpPost
String postUrl = Config.getConfig().getFtpTransmitterServiceURL()+"ftpUpload" ;
HttpPost post = new HttpPost("http://localhost:9091/MyApi/method");
StringEntity postingString = new StringEntity( ftpRequestJson );
post.setEntity(postingString);
post.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
post.setHeader("toDir", null); //ToDirectory is specified in the request
post.setHeader("fileName", fileName);
//Set authorization:
String auth = "username" + ":" + "password";
byte[] encodedAuth = Base64.getEncoder().encode(
auth.getBytes(StandardCharsets.ISO_8859_1)
) ;
String authHeader = "Basic " + new String(encodedAuth);
post.setHeader(HttpHeaders.AUTHORIZATION, authHeader);
HttpResponse response = httpClient.execute(post);
Я даже не попадаю на первую строку в методе "метод" контроллера Microservice, поэтому нет необходимости размещать его здесь .