Загрузка mp4 с телефона Android на сервер Spring приводит к тому, что в файле не хватает нескольких сотен байт, если он превышает 2 МБ - PullRequest
0 голосов
/ 04 августа 2020

Я пытался загрузить на сервер Java Spring, работающий на моем ноутбуке, используя приложение, написанное в формах Xamarin, используя физическое устройство Redmi Android.

Но когда я отправляю многостраничный запрос, если он превышает примерно 2 МБ, файл теряет несколько сотен байтов к тому времени, когда он достигает сервера.

Например, исходный видеофайл имеет 8 268 891 байт. Иногда файл, который достигает сервера, будет иметь 8 267 175, а иногда 8 269 279 или какое-то другое случайное число.

Я не знаю, связано ли это с моим кодом Xamarin, потому что это, похоже, происходит независимо от того, использую ли я многостраничные запросы или отправьте его как строку base64 в запросе.

Но на всякий случай вот мой код Xamarin из нескольких частей

               var multipartContent = new MultipartFormDataContent();
                var videoBytes = new ByteArrayContent(file.GetStream().ToByteArray());
                multipartContent.Add(videoBytes, "file", file.Path.FileName());
                multipartContent.Add(new StringContent(serializedRequest, Encoding.UTF8, "application/json"), "request");

                content = multipartContent;
            }

            switch (type)
            {
                case RequestType.Post:
                    result = await client.PostAsync(_siteUrl + apiPath, content, cancellationToken);
                    break;

И мой контроллер на сервере Spring

  @RequestMapping(value = { RequestMappingConstants.MOBILE + RequestMappingConstants.UPLOAD + RequestMappingConstants.UPLOAD_VIDEO }, method = RequestMethod.POST)
  public @ResponseBody VideoUploadResponse uploadVideo(@RequestPart(value="request") VideoUploadRequest request, @RequestPart(value="file") MultipartFile file, HttpServletRequest httpRequest) {
      LOG.info("Inside video upload");
      return uploadService.uploadWelcomeVideo(request, file, httpRequest);

}

Также мои настройки на сервере:

multipart.maxFileSize= 100MB
multipart.maxRequestSize= 100MB
spring.servlet.multipart.enabled=true 
spring.servlet.multipart.file-size-threshold=2KB 
spring.servlet.multipart.max-file-size=200MB 
spring.servlet.multipart.max-request-size=215MB 
spring.servlet.multipart.resolve-lazily=false 

Опять же, это происходит, пока размер видеофайла превышает 2 МБ. Поврежденный файл, попавший на сервер, невозможно воспроизвести. Сервер и клиент работают в одной сети Wi-Fi.

Я был бы очень благодарен, если бы вы могли помочь.

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Я обнаружил, что вам также необходимо изменить настройки Tomcat и / или Jetty (при необходимости):

server.jetty.max-http-form-post-size: 100MB                                      
                                                                                
server.tomcat.max-http-form-post-size: 100MB                                     
server.tomcat.max-swallow-size: -1
0 голосов
/ 06 августа 2020

Оказалось, что с моим ноутбуком или беспроводной сетью что-то не так, что вызывало потерю пакетов. Ничего общего с кодом, так как он работал, когда я пробовал его на рабочем сервере

...