首页 > 解决方案 > 将 mp4 从 Android 手机上传到 Spring 服务器会导致文件丢失几百字节(如果大于 2MB)

问题描述

我一直在尝试上传到在我的笔记本电脑上运行的 Java Spring 服务器,使用以 Xamarin 形式编写的应用程序,使用物理 Redmi Android 设备。

但是当我发出多部分请求时,如果它大于大约 2MB,则文件在到达服务器时会丢失几百字节。

例如,原始视频文件有 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 

同样,只要视频文件超过 2MB,就会发生这种情况。到达服务器的损坏文件无法播放。服务器和客户端在同一个 wi-fi 网络上运行。

如果您能提供帮助,我将不胜感激。

标签: javaandroidspringxamarin.formsfile-upload

解决方案


我发现您还需要调整 Tomcat 和/或 Jetty(视情况而定)设置:

server.jetty.max-http-form-post-size: 100MB                                      
                                                                                
server.tomcat.max-http-form-post-size: 100MB                                     
server.tomcat.max-swallow-size: -1

推荐阅读