- pom.xml
依赖包
<!-- ant zip解压-->
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.7</version>
</dependency>
- jsp页面
用"multipart/form-data"进行上传
<form action=url id="domeform" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="addfile" value="选择文件" accept=".zip"/>
</form>
<button type="button" class="btn btn-danger" id="adduploadDocument" onclick="addInfo()"><i
class="icon-signin"></i> 导入
</button>
- Ajax
用ajax将压缩包文件提交给后端
function addInfo() {
/**
* 使用FormData
*/
if ($("#addfile").val() == "" || $("#addfile").val() == undefined) {
alert("请选择好上传文件");
return
}
var formdata = new FormData($("#domeform")[0]);
$.ajax({
url: url,
type: "POST",
data:formdata,
dataType: "json",
processData: false, // 告诉jQuery不要去处理发送的数据
contentType: false, // 告诉jQuery不要去设置Content-Type请求头
success: function (data) {
console.log(data);
}
});
}
- Controller后端处理
用“MultipartFile file”接收
@Controller
public class unZipController extends BaseController {
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(unZipController.class);
@RequestMapping(value = url, method = {RequestMethod.POST})
@ResponseBody
public Map<String, Object> batchadd(HttpServletRequest request, MultipartFile file, HttpServletResponse response) throws Exception {
/*
*创建临时文件夹
* 解压文件
*/
String fileName = file.getOriginalFilename();
String path = "d:/zip/";
File dir = new File(path);
dir.mkdirs();
String filePath = "d:/test/";
File fileDir = new File(filePath);
fileDir.mkdirs();
File saveFile = new File(fileDir, fileName);//将压缩包解析到指定位置
List<String>list = new ArrayList<>();
try {
file.transferTo(saveFile);
String newFilePath = filePath + fileName;
File zipFile = new File(newFilePath);
unZipFiles(zipFile, path);//解压文件,获取文件路径
System.out.println(JSON.toJSONString(list));
} catch (Exception e) {
e.printStackTrace();
System.out.println("解压执行失败");
}
**//程序结束时,删除临时文件
deleteFiles(filePath);//删除压缩包文件夹
deleteFiles(path);//删除解压文件夹**
Map<String, Object> jsonMap = new HashMap<String, Object>();
jsonMap.put("ret",list);
return jsonMap;
}
}
具体解压方法
/**
* zip解压
* @param srcFile zip源文件
* @param destDirPath 解压后的目标文件夹
* @throws RuntimeException 解压失败会抛出运行时异常
*/
public static void unZipFiles(File srcFile, String destDirPath) throws RuntimeException {
long start = System.currentTimeMillis();
// 判断源文件是否存在
if (!srcFile.exists()) {
throw new RuntimeException(srcFile.getPath() + "所指文件不存在");
}
// 开始解压
ZipFile zipFile = null;
try {
zipFile = new ZipFile(srcFile);
Enumeration<?> entries = zipFile.getEntries();
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
System.out.println("解压" + entry.getName());
// 如果是文件夹,就创建个文件夹
if (entry.isDirectory()) {
String dirPath = destDirPath + "/" + entry.getName();
File dir = new File(dirPath);
dir.mkdirs();
} else {
// 如果是文件,就先创建一个文件,然后用io流把内容copy过去
File targetFile = new File(destDirPath + "/" + entry.getName());
// 保证这个文件的父文件夹必须要存在
if(!targetFile.getParentFile().exists()){
}
targetFile.createNewFile();
// 将压缩文件内容写入到这个文件中
InputStream is = zipFile.getInputStream(entry);
FileOutputStream fos = new FileOutputStream(targetFile);
int len;
byte[] buf = new byte[1024];
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
// 关流顺序,先打开的后关闭
fos.close();
is.close();
}
}
long end = System.currentTimeMillis();
System.out.println("解压完成,耗时:" + (end - start) +" ms");
} catch (Exception e) {
throw new RuntimeException("unzip error from ZipUtils", e);
} finally {
if(zipFile != null){
try {
zipFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
解压后通过文件路径调用玩文件,需要先关闭文件流,然后再用file.delete()删除临时文件夹,先删除子目录再删除空文件夹
/**
* @param filePath
* 临时文件的删除
* 删除文件夹里面子目录
* 再删除文件夹
*/
public void deleteFiles(String filePath) {
File file = new File(filePath);
if ((!file.exists()) || (!file.isDirectory())) {
System.out.println("file not exist");
return;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (filePath.endsWith(File.separator)) {
temp = new File(filePath + tempList[i]);
}
else {
temp = new File(filePath + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
this.deleteFiles(filePath + "/" + tempList[i]);
}
}
// 空文件的删除
file.delete();
}