其他分享
首页 > 其他分享> > 文件导出ZIP压缩

文件导出ZIP压缩

作者:互联网

文件导出ZIP压缩

	@Override
public String downloadallfiles(HttpServletRequest request, String lsbpId, String bsTitle) {
	JwtUserObject jwtUserObject = JwtUtil.getJwtUserObj(request.getHeader("Authorization"));
	String userid = jwtUserObject.getUSERID();
	String username = jwtUserObject.getUSERNAME();
	String itemcode = jwtUserObject.getITEMCODE();
	String orgcode = jwtUserObject.getORGCODE();
	String useridentity = jwtUserObject.getUSERIDENTITY();
	//判断是否已经压缩过该文件
	List<FileObject> list = benbuMapper.findCzFileZipById(lsbpId);
	if (list!=null && list.size() > 0) {
		String path = sso.getPresignedObjectUrlByBucketNameAndPath(list.get(0).getBucketname(), list.get(0).getFilepath());
		return path;
	}

	File file1 = new File(tempfile);
	if (!file1.exists()) {
		file1.mkdirs();
	} else {
		deleteFile(file1);
		if (flag == 1) {
			System.out.println("文件删除成功!");
		}
		file1.mkdirs();
	}
	//根据本部主键查询厂站报送的文件
	List<HashMap<String, String>> files = benbuMapper.findCzFileById(lsbpId);
	if (files != null && files.size() > 0) {
		for (HashMap map : files) {
			//临时目录下新增文件
			File file2 = new File(tempfile + "/" + map.get("itemCode"));
			if (!file2.exists()) {
				file2.mkdirs();
			}
			sso.downLoadFileByid((String) map.get("fileId"), tempfile + "/" + map.get("itemCode"));
		}
	}
	//文件压缩
	FileZipUtil.compressToZip(tempfile, zipDowload, bsTitle + ".zip");

	FileItem fileItem = null;
	MultipartFile file = getMultipartFile(bsTitle);
	FileObject fileObject2 = sso.uploadFileCommondLs(file, userid, username, itemcode, orgcode, "10005", useridentity, lsbpId,
			itemcode.toLowerCase(), FileTypeConstant.COMP_10 + "/10005/", "");
	String path = sso.getPresignedObjectUrlByBucketNameAndPathLs(fileObject2.getBucketname(), fileObject2.getFilepath());

	//删除本地文件
	deleteFile(new File(zipDowload));

	return path;

}

文件压缩工具类

public class FileZipUtil {
    /**
     * 压缩文件
     *
     * @param sourceFilePath 源文件路径
     * @param zipFilePath    压缩后文件存储路径
     * @param zipFilename    压缩文件名
     */
    public static  String compressToZip(String sourceFilePath, String zipFilePath, String zipFilename) {
        File sourceFile = new File(sourceFilePath);
        File zipPath = new File(zipFilePath);
        if (!zipPath.exists()) {
            zipPath.mkdirs();
        }
        File zipFile = new File(zipPath + File.separator + zipFilename);
        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
            writeZip(sourceFile, "", zos);
            return "压缩完成";
            //文件压缩完成后,删除被压缩文件
//            boolean flag = deleteDir(sourceFile);
//            System.out.println(flag);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e.getMessage(), e.getCause());
        }
    }

    /**
     * 遍历所有文件,压缩
     *
     * @param file       源文件目录
     * @param parentPath 压缩文件目录
     * @param zos        文件流
     */
    public static void writeZip(File file, String parentPath, ZipOutputStream zos) throws IOException {
        if (file.isDirectory()) {
            //目录
            parentPath += file.getName() + File.separator;
            File[] files = file.listFiles();
            for (File f : files) {
                writeZip(f, parentPath, zos);
            }
        } else {
            //文件
            try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
                //指定zip文件夹
                ZipEntry zipEntry = new ZipEntry(parentPath + file.getName());
                zos.putNextEntry(zipEntry);
                int len;
                byte[] buffer = new byte[1024 * 10];
                while ((len = bis.read(buffer, 0, buffer.length)) != -1) {
                    zos.write(buffer, 0, len);
                    zos.flush();
                }
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e.getMessage(), e.getCause());
            }
        }
    }

    /**
     * 删除文件夹
     *
     * @param dir
     * @return
     */
    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();
    }
}

标签:文件,file,String,ZIP,压缩,导出,zos,File,new
来源: https://www.cnblogs.com/hhs-5120/p/16656851.html