java - 将 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 网络上运行。
如果您能提供帮助,我将不胜感激。
解决方案
我发现您还需要调整 Tomcat 和/或 Jetty(视情况而定)设置:
server.jetty.max-http-form-post-size: 100MB
server.tomcat.max-http-form-post-size: 100MB
server.tomcat.max-swallow-size: -1
推荐阅读
- python - 如何在 keras 中实现 maclaurin 系列?
- javascript - Django 在 html 模板中获取 modelformset_factory 输入字段 ID
- c++ - Mac VSCode 调试器总是显示关于 ';' 的错误 和 ':'
- python - 如何产生一个新的外壳?
- amazon-web-services - Packer 构建在最后一个命令上挂起
- swift - 在 switch 中正确制定 if 语句
- html - 如何通过马赛克方式放置卡片?
- python - 刮文字;我不确定 Google Chrome Inspect 元素是否给了我正确的 XPath。我在哪里可以获得正确的路径?
- scala - 我的任务是更新具有字符串类型和结构列的 spark 数据框。我正在尝试在 scala 中做
- list - 在 Ansible 中创建列表时添加“未定义”条目