springboot项目,后端集成上传zip文件,并解压到指定的文件中
上传
@PostMapping(value = "/upload")
public JsonResponse upload(@RequestParam(value="id",required=true) String id, @RequestParam(required = false) MultipartFile file) {
try {
System.out.println("upload start = " + System.currentTimeMillis());
String videoUrl = uploadFile(file,id);
System.out.println("upload end = " + System.currentTimeMillis());
return okJson(videoUrl);
} catch (Exception e) {
e.printStackTrace();
return errorJson("文件上传失败!");
}
}
@Value("${jeecg.path.uploadFile}") //获取配置文件上传路径
private String uploadFileURL;
public String uploadFile(MultipartFile file,String id) throws Exception {
Integer batch = 1; //文件版本号
ThreeDimensionRoom room = roomService.selectBatchById(id);
if (!org.springframework.util.StringUtils.isEmpty(room)) {
batch+=room.getBatch();
}
roomService.updateBatchById(id, batch);
String shortPath = file.getOriginalFilename();
File dest = new File(uploadFileURL+"//upFile//"+id+"//"+batch, shortPath);
if (!dest.getParentFile().exists()) {
boolean rel = dest.getParentFile().mkdirs();
if (!rel) {
throw new JeecgBootException("文件夹创建失败");
}
}
InputStream is = file.getInputStream();
OutputStream os = new FileOutputStream(dest);
try {
byte[] buffer = new byte[8 * 1024];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
} catch (Exception e) {
return errorJson("上传失败!");
} finally {
is.close();
os.close();
}
return shortPath;
}
解压
public JsonResponse unZipFiles(@RequestParam(value="id",required=true) String id) {
try {
Integer batch = 1;
ThreeDimensionRoom room = roomService.selectBatchById(id);
if (!org.springframework.util.StringUtils.isEmpty(room)) {
batch=room.getBatch();
}
File zipFile = new File(uploadFileURL+"//upFile//"+id+"//"+batch +"//machineRoom.zip");
String path = uploadFileURL+"//unzipFile//"+id+"//"+batch +"//"; //解压到指定的文件夹目录
unZipFiles(zipFile, path);
return okJson();
} catch (Exception e) {
e.printStackTrace();
return errorJson("找不到对应的文件,解压失败!");
}
}
//解压文件到指定目录
@SuppressWarnings("rawtypes")
public static void unZipFiles(File zipFile,String descDir) throws IOException {
File pathFile = new File(descDir);
if(!pathFile.exists()) {
pathFile.mkdirs();
}
//解决zip文件中有中文目录或者中文文件
ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));
for(Enumeration entries = zip.entries(); entries.hasMoreElements();) {
ZipEntry entry = (ZipEntry)entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;
//判断路径是否存在,不存在则创建文件路径
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if(!file.exists()) {
file.mkdirs();
}
//判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
if(new File(outPath).isDirectory()) {
continue;
}
//输出文件路径信息
// System.out.println(outPath);
OutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while((len=in.read(buf1))>0) {
out.write(buf1,0,len);
}
in.close();
out.close();
}
zip.close();
System.out.println("******************解压完毕********************");
}