controller中使用
@PostMapping(value = "/importZip")
public Result<?> importExcel(HttpServletRequest request) throws Exception {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile file = multipartRequest.getFile("file");
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")).toLowerCase();
String filenameorg = file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf("."));
if (!".zip".equals(suffix)){
return Result.error("请上传 .zip 压缩文件");
}
String path = uploadPath+"/modal/"+filenameorg;
File descDir = new File(path);
if (descDir.isDirectory()){
descDir.mkdirs();
}
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(descDir +"/"+ file.getOriginalFilename()));
String unZipFilePath = ZipUtil.unZipFiles(path +"/"+ file.getOriginalFilename(),path);
List<File> excelfilelist = ZipUtil.readExcelFile(unZipFilePath);
ExcelVerifyVo vo = null;
try {
vo = this.verify(excelfilelist, unZipFilePath);
}catch (Exception e){
e.printStackTrace();
ZipUtil.deleteDir(new File(path));
log.info("删除临时文件...");
throw new RuntimeException("导入失败");
}
}
工具类
import com.xkcoding.http.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@Slf4j
public class ZipUtil {
public static String unZipFiles(String sourceFile, String descDir) throws IOException {
File descDirFile = new File(descDir);
if (!descDirFile.exists()) {
descDirFile.mkdirs();
}
ZipFile zip = new ZipFile(sourceFile, Charset.forName("GBK"));
String orgMkdirs = "";
for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
String outPath = (descDir + "/" + zipEntryName).replaceAll("\\*", "/");
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if (!file.exists()) {
file.mkdirs();
}
orgMkdirs = outPath.substring(0, outPath.lastIndexOf('/'));
if (new File(outPath).isDirectory()) {
continue;
}
try(InputStream in =zip.getInputStream(entry);
OutputStream out =new FileOutputStream(outPath)){
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
}catch(IOException e){
log.error("解压失败!");
log.error(e.getMessage(),e);
}
}
zip.close();
return orgMkdirs;
}
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}
public static List<File> readExcelFile(String path) {
File file = new File(path);
List<File> resultlist = new ArrayList<>();
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File fi : files) {
if (fi.getName().contains(".xls") || fi.getName().contains(".xlsx")) {
resultlist.add(fi);
}
}
}
return resultlist;
}
public static List<File> readAllFileByFilename(String path, String filename) {
List<File> resultlist = new ArrayList<>();
if (StringUtil.isNotEmpty(path)){
File file = new File(path);
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File fi : files) {
if (fi.getName().equals(filename)) {
resultlist.add(fi);
}
}
}
}
return resultlist;
}
public static File readFileByFilename(String path, String filename) {
List<File> resultlist = new ArrayList<>();
if (StringUtil.isNotEmpty(path)){
File file = new File(path);
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File fi : files) {
if (fi.getName().equals(filename) && fi.isFile()) {
return fi;
}
}
}
}
return null;
}
public static void main(String[] args) throws IOException {
}
}