2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > java—图片文件zip解压并转base64

java—图片文件zip解压并转base64

时间:2022-04-03 20:59:47

相关推荐

java—图片文件zip解压并转base64

主要是为了解决图片文件zip解压并转base64,图片以base64编码保存,不以文件形式保存至服务器的场景。

1、文件解析后对象

/*** 文件解析对象*/@Datapublic class UnzipFileVo {/*** 文件类型:(0:文件夹;1:图片)*/private Integer type;/*** 文件路径(如:src/main/java/com/zyq/entity/User.java)*/private String path;/*** 图片名称*/private String name;/*** 图片base64*/private String imgBase64;}

2、解压文件工具类

/*** 解析文件工具类*/public class UnzipUtils {/*** 本地文件解压** @param file 压缩后的zip图片文件* @return 解压后的图片信息列表*/public static List<UnzipFileVo> unzip(File file) {if (Objects.isNull(file) || !file.exists()) {return Collections.emptyList();}ZipFile zip = null;try {zip = new ZipFile(file);} catch (IOException e) {e.printStackTrace();}if (Objects.isNull(zip)) {return Collections.emptyList();}Enumeration<? extends ZipEntry> entries = zip.entries();List<UnzipFileVo> vos = new ArrayList<>();while (entries.hasMoreElements()) {ZipEntry entry = entries.nextElement();String path = entry.getName();UnzipFileVo vo = new UnzipFileVo();vo.setPath(path);// 解析文件夹boolean directory = entry.isDirectory();if (directory) {//为空的文件夹,不做处理continue;}byte[] bytes = null;try {InputStream in = zip.getInputStream(entry);bytes = read(in); //解决图片显示不全问题} catch (IOException e) {e.printStackTrace();}BASE64Encoder encoder = new BASE64Encoder();String base64Str = encoder.encode(bytes); //bytes转base64String name = path.substring(path.lastIndexOf("/") + 1).split("\\.")[0];vo.setType(1);vo.setName(name);vo.setImgBase64("data:image/png;base64," + base64Str);vos.add(vo);}if (Objects.nonNull(zip)) {try {zip.close();} catch (IOException e) {e.printStackTrace();}}return vos;}/*** 处理图片显示不全问题** @param inputStream 上传文件流* @return 字节*/public static byte[] read(InputStream inputStream) throws IOException {try {ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int num = inputStream.read(buffer);while (num != -1) {baos.write(buffer, 0, num);num = inputStream.read(buffer);}baos.flush();return baos.toByteArray();} finally {if (inputStream != null) {inputStream.close();}}}/*** 上传文件解压** @param multipartFile 上传文件* @return 解压后的文件列表*/public static List<UnzipFileVo> unzip(MultipartFile multipartFile) {File file = MultipartFileToFileUtil.transferToFile(multipartFile);if (Objects.isNull(file)) {return Collections.emptyList();}List<UnzipFileVo> vos = unzip(file);if (file.exists()) {file.delete();}return vos;}}

public class MultipartFileToFileUtil {/*** MultipartFile 转 File** @param multipartFile* @throws Exception*/public static File transferToFile(MultipartFile multipartFile) {//选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。File file = null;try {String originalFilename = multipartFile.getOriginalFilename();//获取文件后缀String prefix = originalFilename.substring(originalFilename.lastIndexOf("."));file = File.createTempFile(originalFilename, prefix);multipartFile.transferTo(file);file.deleteOnExit();} catch (IOException e) {e.printStackTrace();}return file;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。