Как настроить размер тела http-запроса - PullRequest
0 голосов
/ 17 февраля 2020

Как настроить мой запрос 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, поэтому нет необходимости размещать его здесь .

...