昨天遇到个异常 org.apache.commons.fileupload.MultipartStream IOFileUploadException:Processingofmultipart/form−datarequestfailed.org.apache.commons.fileupload.MultipartStreamMalformedStreamException: Stream ended unexpectedly。
在本地调试的时候什么都是好的,一部署到Linux上就产生这个异常。尝试了各种方法来解决它,比喻配置tomcat临时文件路径、配置tomcat post 大小、配置mulitipart 上传大小限制等等,都没有解决。
各种烦躁,最后快要放弃的的时候,将Springboot 的版本降到了2.1.2 结果问题就解决了。
@PostMapping(value="save")
@ApiOperation(value = "保存图片", notes = "")
JsonResult saveImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
Iterator<String> iter = mRequest.getFileNames();
String picNames = "";
while (iter.hasNext()) {
MultipartFile multipartFile = mRequest.getFile(iter.next());
if (null != multipartFile) {
String picName = UUID.randomUUID().toString().replaceAll("-", ""); //新文件名
picNames += (MyStrUtils.isEmpty(picNames) ? "" : ",") + picName;
ImageUtils.save(multipartFile, weappProperties.getPath(), picName, weappProperties.getPictype());
}
}
if(MyStrUtils.isNotEmpty(picNames)) return JsonResult.success(picNames);
else return JsonResult.fail("上传的图片为空");
}
@PostMapping(value="insert")
@ApiOperation(value = "保存单图片", notes = "")
public JsonResult insertImage( @RequestParam("file") MultipartFile multipartFile) throws Exception{
String picName= UUID.randomUUID().toString().replaceAll("-", "");
ImageUtils.save(multipartFile, weappProperties.getPath(), picName,weappProperties.getPictype());
return JsonResult.success(picName);
}
在Linux服务器上异常表现在 1、第一次大文件可以上传 ,之后超过几K的文件都不可以上传 2、在上图save方法返回的直接是上传的图片为空,insert方法直接抛异常找不到multipartFile对象
这个问题虽然是解决了,但是究竟原理是什么还得待日后发掘(耽误的时间太久了)。