公司要求上传5g大的文件,之前采取设置后台文件上传时间,后面觉得此方案不行,故采取分片上传的方案来实现(前端可用webUploader插件):
一. 先分片上传
/**
* 分片上传
*
* @param fileName 文件名称
* @param chunkNumber 当前片数
* @param file 文件
* @return
*/
public void uploadFile(HttpServletRequest request, String fileName, Integer chunkNumber, MultipartFile file) {
String zipFilePath = "D://filepath";
try {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
// 临时目录用来存放所有分片文件
String tempFileDir = zipFilePath + fileName;
File parentFileDir = new File(tempFileDir);
if (!parentFileDir.exists()) {
parentFileDir.mkdirs();
}
// 分片处理时,前台多次调用上传接口,每次都会上传一部分到后台
File tempPartFile = new File(parentFileDir, fileName + "_" + chunkNumber + ".part");
FileUtils.copyInputStreamToFile(file.getInputStream(), tempPartFile);
}
logger.info("uploadFile End......");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
二. 合并文件