springmvc上传zip文件解析,并获取每个zipEntry的输入流

1.解析springmvc上传zip的工具类:

public class FileUtils {

	//日志

	private static final Logger LOGGER = LoggerFactory.getLogger(FileUtils.class);

	/**
	 * 对zip类型的文件进行解压
	 *
	 * @author mmy
	 * @date 2018年1月8日
	 */
	public static List<FileModel> unzip(MultipartFile file) {
		// 判断文件是否为zip文件
		String filename = file.getOriginalFilename();
		if (!filename.endsWith("zip")) {
			LOGGER.info("传入文件格式不是zip文件" + filename);
			new BusinessException("传入文件格式错误" + filename);
		}
		List<FileModel> fileModelList = new ArrayList<FileModel>();
		String zipFileName = null;
		// 对文件进行解析
		try {
			ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream(), Charset.forName("GBK"));
			BufferedInputStream bs = new BufferedInputStream(zipInputStream);
			ZipEntry zipEntry;
			byte[] bytes = null;
			while ((zipEntry = zipInputStream.getNextEntry()) != null) { // 获取zip包中的每一个zip file entry
				zipFileName = zipEntry.getName();
				Assert.notNull(zipFileName, "压缩文件中子文件的名字格式不正确");
				FileModel fileModel = new FileModel();
				fileModel.setFileName(zipFileName);
				bytes = new byte[(int) zipEntry.getSize()];
				bs.read(bytes, 0, (int) zipEntry.getSize());
				InputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
				fileModel.setFileInputstream(byteArrayInputStream);
				fileModelList.add(fileModel);
			}
		} catch (Exception e) {
			LOGGER.error("读取部署包文件内容失败,请确认部署包格式正确:" + zipFileName, e);
			new BusinessException("读取部署包文件内容失败,请确认部署包格式正确:" + zipFileName);
		}
		return fileModelList;
	}

}

2.存储每个解压后文件的model

public class FileModel implements Serializable{
	private static final long serialVersionUID = 13846812783412684L;
	String fileName;			//解压后文件的名字
	String fileType;			//文件类型
	InputStream fileInputstream;		//解压后每个文件的输入流


	public String getFileName() {
		return this.fileName;
	}


	public void setFileName(String fileName) {
		this.fileName = fileName;
	}


	public String getFileType() {
		return this.fileType;
	}


	public void setFileType(String fileType) {
		this.fileType = fileType;
	}


	public InputStream getFileInputstream() {
		return this.fileInputstream;
	}


	public void setFileInputstream(InputStream fileInputstream) {
		this.fileInputstream = fileInputstream;
	}


	public String toString() {
		return "FileModel{fileName=\'" + this.fileName + '\'' + ", fileType=\'" + this.fileType + '\''
				+ ", fileInputstream=" + this.fileInputstream + '}';
	}
}


  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值