当前位置: 代码迷 >> Web前端 >> 下传 zip 文件 并且 解压
  详细解决方案

下传 zip 文件 并且 解压

热度:519   发布时间:2012-08-28 12:37:01.0
上传 zip 文件 并且 解压

使用struts2默认提供的方式上传文件

?

Action中的属性和方法

?private File uploadZip;

?private String uploadZipContentType;

?private String uploadZipFileName;

?


?public String uploads() {

??try {

???String savePath = ServletActionContext.getRequest().getRealPath(
?????"/upload");
???InputStream inputStream = new FileInputStream(uploadZip);

???OutputStream outputStream = new FileOutputStream(savePath
?????+ "/up.zip");
???byte[] buffer = new byte[1024];
???int len;
???while ((len = inputStream.read(buffer)) > 0) {
????outputStream.write(buffer, 0, len);
???}

???userService.getZipFile(savePath + "/up.zip",savePath);

???return "suc";
??} catch (Exception e) {
???e.printStackTrace();
???return "index";
??}

?}

?

?

Service中的方法

?

public void getZipFile(String path, String savePath) throws Exception {
??ZipFile zipFile = new ZipFile(path);
??Enumeration entryEnum = zipFile.getEntries();
??if (null != entryEnum) {
???ZipEntry zipEntry = null;

???while (entryEnum.hasMoreElements()) {
????zipEntry = (ZipEntry) entryEnum.nextElement();

????// if (zipEntry.isDirectory()) {
????// savePath = savePath + File.separator + zipEntry.getName();
????// System.out.println(savePath);
????// continue;
????// }

????if (zipEntry.getSize() > 0) {
?????// 指定文件
?????File targetFile = buildFile(savePath + File.separator
???????+ zipEntry.getName(), false);

?????OutputStream os = new BufferedOutputStream(
???????new FileOutputStream(targetFile));
?????// 读取zip
?????InputStream is = zipFile.getInputStream(zipEntry);
?????byte[] buffer = new byte[4096];
?????int readLen = 0;
?????while ((readLen = is.read(buffer, 0, 4096)) >= 0) {
??????os.write(buffer, 0, readLen);
?????}
?????os.flush();
?????os.close();
????} else {
?????// 空目录
?????buildFile(savePath + File.separator + zipEntry.getName(),
???????true);
????}

???}

??}

?}

?/**
? * 如果文件所在路径不存在则生成路径
? *
? * @param fileName
? *??????????? 文件名 带路径
? * @param isDirectory
? *??????????? 是否为路径
? * @return
? */
?public File buildFile(String fileName, boolean isDirectory) {

??File target = new File(fileName);
??if (isDirectory) {
???target.mkdirs();
??} else {
???if (!target.getParentFile().exists()) {
????target.getParentFile().mkdirs();
????target = new File(target.getAbsolutePath());
???}
??}
??return target;
?}

?

  相关解决方案