Angular上传大图片报错Postman正常问题排查与解决
问题:Angular上传大于1MB图片到Spring Boot后端触发java.io.EOFException
现象
- Angular上传大于1MB的图片(如5MB PNG文件)到Spring Boot后端时,后端抛出
java.io.EOFException - Postman执行相同请求可正常完成,小于1MB的图片Angular上传无异常
相关代码
Spring Boot POST控制器
@PostMapping("/post") public void postPicture(@RequestPart("pictureDetails") PictureDetailsDto picturePostDto, @RequestPart("inpFile") MultipartFile image, HttpServletRequest request) { pictureService.postPicture(picturePostDto, image, request); }
Angular上传函数
postPicture(picturePostDto: PicturePostDto, pictureImage: File | null) { const formData = new FormData(); const picturePart = new Blob([JSON.stringify(picturePostDto)], { type: 'application/json', }); formData.append('pictureDetails', picturePart); if (pictureImage != null) { formData.append('inpFile', pictureImage) } const options = { withCredentials: true, }; return this.http.post<any>(`${this.apiUrl}/picture/post`, formData, options); }
异常信息
后端异常栈核心为java.io.EOFException相关调用链。
排查结果与解决方案
最终定位问题根源:调用上传API的组件函数中存在window.location.reload();语句——该语句会在大文件上传请求完成前强制刷新页面,导致请求被中途取消,后端因未接收到完整的请求体抛出EOFException。
解决方法:注释或移除该window.location.reload();语句,确保上传请求能完整执行完毕。
内容的提问来源于stack exchange,提问作者Davido
相关产品推荐
相关产品推荐

