SpringBoot大文件上传
SpringBoot大文件上传知识准备基于分片的断点续传和秒传当我们上传的文件很大时对大文件的处理通常通过分片上传、断点续传和秒传技术手段实现。分片上传分片上传就是将一个大文件分成若干份大小相等的小块文件等所有小块文件上传成功后再将文件进行合并成完整的原始文件。断点续传断点续传就是重新上传文件时先判断哪些文件块已经上传过了比如将分片的chuck md5等信息保存在DB中)如果上传过了则跳过这些块否则上传没有上传的块。秒传当用户选择上传一个文件时服务端检测该文件之前是否已经被上传过如果服务器已经存有该文件完全一样就立马返回前端 文件已上传成功。前端随即将进度条更新至100%。 这样给用户的感觉就是 秒传 的感觉。对于分片上传前后端分别需要怎么做呢前端需要将文件file.slice()成多个文件块并计算每一块的md5值每次请求上传都是传一个小文件块。后端需要接收每次上传的文件块并保存文件块的信息比如md5), 如果已经上传则跳过最后等所有文件上传完成之后将所有的文件块合并成一个大文件。异步上传当我们上传的文件很大后台需要处理的时间很长用户期望切换到其它页面继续工作而不需要等待完成。这时候我们可以采用异步上传的方式。在SpringBoot中将一个方法声明为异步方法非常简单只需两个注解即可EnableAsync和Async。EnableAsync用于开启SpringBoot支持异步的功能用在SpringBoot的启动类上。SpringBootApplication EnableAsync // 这里 public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }Async用于方法上标记该方法为异步处理方法。Service public class UserServiceImpl { Async // 这里带Async的方法会被当成一个子线程 public void processFile(InputStream inputStream) { } }实现案例TBD示例源码https://github.com/realpdai/tech-pdai-spring-demos