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