文件上传,服务器异步处理文件导致异常

/ 默认分类 / 没有评论 / 440浏览

代码先行

demo地址

文件上传,服务器异步处理文件

@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public String uploadFile(MultipartFile file){
	System.out.println("request start: file.isEmpty="+file.isEmpty());
	new Thread(()->{
		try {
			Thread.sleep(1000);
			// why file is empty?
			System.out.println("detail request: file.isEmpty="+file.isEmpty());
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}).start();
	System.out.println("request end: file.isEmpty="+file.isEmpty());
	return "{"msg":"success!"}";
}

结果输出:

request start: file.isEmpty=false
request end: file.isEmpty=false
detail request: file.isEmpty=true

原因:

response之后,会clear临时数据(包含临时文件),所以异步出去的逻辑在response之后去读文件,将会读不到文件。