Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将mp4从Android手机上传到Spring服务器会导致文件丢失数百字节(如果大于2MB)_Java_Android_Spring_Xamarin.forms_File Upload - Fatal编程技术网

Java 将mp4从Android手机上传到Spring服务器会导致文件丢失数百字节(如果大于2MB)

Java 将mp4从Android手机上传到Spring服务器会导致文件丢失数百字节(如果大于2MB),java,android,spring,xamarin.forms,file-upload,Java,Android,Spring,Xamarin.forms,File Upload,我一直在尝试使用Xamarin表单编写的应用程序,使用物理Redmi Android设备,上传到笔记本电脑上运行的JavaSpring服务器 但是当我发送多部分请求时,如果它大于2MB,文件到达服务器时会丢失几百字节 例如,原始视频文件有8268891字节。有时到达服务器的文件将有8267175,有时有8269279或其他一些随机数 我不知道它是否与我的Xamarin代码有关,因为无论我是使用多部分请求还是在请求中将其作为base64字符串发送,似乎都会发生这种情况 但以防万一,这里是我的多部分

我一直在尝试使用Xamarin表单编写的应用程序,使用物理Redmi Android设备,上传到笔记本电脑上运行的JavaSpring服务器

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

例如,原始视频文件有8268891字节。有时到达服务器的文件将有8267175,有时有8269279或其他一些随机数

我不知道它是否与我的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网络上运行


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

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

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

结果是我的笔记本电脑或无线网络出了问题,导致了数据包丢失。与代码无关,因为当我在生产服务器上尝试它时,它正在工作

谢谢,但我担心它无法修复。对不起:您正在运行哪个版本的Spring Boot?(属性名称使用2.1.x进行了更改,之前有所不同。)2.0.3。为我的spring服务器编译的属性如下:server.tomcat.max http post size=100000000 server.tomcat.max http header size=10000。你的答案仍然有用,所以给它+1我很高兴它有帮助——属性名称改变了(正如你所确定的),文件大小树代表什么?在延迟文件输出流中,如果多部分文件超过2KB,则将其另存为文件。如果更少,则将其保存在内存中。