最近项目中需要在导入功能中加进度条展示,就用了ExecutorService将文件导入操作放到线程中执行,前台通过轮询任务进度。
当上传一些小文件时,测试正常。上传大文件时就会卡死,后台日志也没有报错信息。
通过断点调试到读取文件的代码时,发现执行到file.getInputStream()方法时,报错:
java.lang.IllegalStateException: File has been moved - cannot be read again
参考网上的解决办法 将spring-mvc.xml中的multipartResolver的maxInMemorySize调整后 情况解决
也可以将file.getInputStream()的执行放在线程外面,将输入流传递到线程中进行解析。
参考: