需求
前端上传一个.zip压缩包,里面是很多需要处理的文件,Server端需要按照指定规则对这些文件进行处理,然后将处理后的文件重新打包,上传到公司的云存储服务oos上,并且将oos上的资源地址url给到前端提供下载。
设计
Q:和产品沟通后了解到,用户可能上传的文件很大,会超过500M;并且处理规则比较复杂,会导致处理流程过慢;但是与此同时,需要具有一定的实时性,不能让用户等待时间过长。
A:综上考虑,本质上就是一个大文件上传 & 处理的事。由于用户要求具有一定的实时性,所以我们采用线程池对上传的大文件异步处理。
线上日志排查问题
java.io.FileNotFoundException: XXXXXX/tmp/MultiPart7953817223010764667.tmp (No such file or directory)
出错的代码片段
// 主线程:接收文件
@PostMapping("/processFile")
public AjaxResult processFile(MultiPartFile file) {
......
// 开启一个子线程异步处理该文件
service.AsyncProcessFile(file)