base64转MultipartFile并压缩得到压缩后对的MultipartFile
接口接收base64转MultipartFile并压缩图片
依赖
<!-- 压缩图片依赖 -->
<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version>
</dependency>
<!-- file 转 MultipartFile 依赖 -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId>
</dependency>
base64转MultipartFile工具类
package com.fillke.file.util;import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Decoder;import java.io.*;/*** Description: base64 转 MultipartFile** @author qts* @date Created on 2022/8/5*/
public class BASE64DecodedMultipartFile implements MultipartFile {private final byte[] imgContent;private final String header;public BASE64DecodedMultipartFile(byte[] imgContent, String header) {this.imgContent = imgContent;this.header = header.split(";")[0];}@Overridepublic String getName() {return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];}@Overridepublic String getOriginalFilename() {return System.currentTimeMillis() + (int) Math.random() * 10000 + "." + header.split("/")[1];}@Overridepublic String getContentType() {return header.split(":")[1];}@Overridepublic boolean isEmpty() {return imgContent == null || imgContent.length == 0;}@Overridepublic long getSize() {return imgContent.length;}@Overridepublic byte[] getBytes() throws IOException {return imgContent;}@Overridepublic InputStream getInputStream() throws IOException {return new ByteArrayInputStream(imgContent);}@Overridepublic void transferTo(File file) throws IOException, IllegalStateException {new FileOutputStream(file).write(imgContent);}public static MultipartFile base64ToMultipart(String base64) {try {String[] baseStrs = base64.split(",");BASE64Decoder decoder = new BASE64Decoder();byte[] b = new byte[0];b = decoder.decodeBuffer(baseStrs[1]);for (int i = 0; i < b.length; ++i) {if (b[i] < 0) {b[i] += 256;}}return new BASE64DecodedMultipartFile(b, baseStrs[0]);} catch (IOException e) {e.printStackTrace();return null;}}
}
代码
String base64 = "";
// 临时文件
File tempFile = null;
if (StrUtil.isNotBlank(base64 )) {// 将base64转成 MultipartFileMultipartFile multipartFile = BASE64DecodedMultipartFile.base64ToMultipart(deployProgram.getPic());// 压缩图片String originalFilename = multipartFile.getOriginalFilename();String prefix = originalFilename.substring(originalFilename.lastIndexOf("."));tempFile = File.createTempFile(UUID.randomUUID().toString(), prefix);// 需引入对应依赖Thumbnails.of(multipartFile.getInputStream()).scale(0.6) //图片大小(长宽)压缩比例 从0-1,1表示原图.outputQuality(0.6) //图片质量压缩比例 从0-1,越接近1质量越好.toFile(tempFile);MultipartFile reduceMultipartFile = new MockMultipartFile("file", tempFile.getName(), null, new FileInputStream(tempFile));
}
// 删除临时file
if (tempFile != null) {tempFile.deleteOnExit();
}
base64转MultipartFile并压缩得到压缩后对的MultipartFile相关推荐
- 使用GZipStream实现压缩和解压缩
概述 之前做项目,涉及到存入到数据库或者http传输的数据量比较大,这个时候,就需要考虑在存入数据库或者发送传输之前,将数据压缩下,当从数据库中取出时,再解压还原数据.特地找了下发现有GZipStre ...
- java 解压与压缩代码_Java实现多文件压缩和解压缩代码详解
Java实现多文件压缩和解压缩代码 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...
- asp.net在线压缩和解压缩的实现
我们经常会遇到批量上传的问题,也会遇到将某个目录下所有文件都上传到服务器上的问题.那么,如何解决此类问题呢?以前的技术一般采用ActiveX等方式,这里我采用SharpZlib来实现,听说VS2005 ...
- Qt中用QuaZip来压缩和解压缩文件
1.简介 QuaZIP是使用Qt,C++对ZLIB进行简单封装的用于压缩ZIP以及解压缩ZIP的开源库.如果你的Qt项目当中用到了压缩以及解压缩ZIP的话你可以考虑选择使用它. 官方主页:http:/ ...
- linux压缩和解压缩类命令|--zip/unzip指令
zip/unzip指令 说明: zip 用于压缩文件,unzip用于解压,这个项目打包发布常用 基本语法 zip [option] xxx.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令) ...
- 【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )
文章目录 一.开启资源压缩 二.启用严格模式的资源引用检查 三.自定义保留/移除资源配置 四.资源压缩效果 五.完整配置 1.keep.xml 配置 2.build.gradle 构建脚本 六.参考资 ...
- Centos之压缩和解压缩命令
常用压缩格式:.zip .gz .bz2 常用压缩格式:.tar.gz .tar.bz2 1.zip格式压缩 zip压缩文件名 源文件 压缩文件 zip -r 压缩文件名 源目录 压缩目录 [roo ...
- 在C#中利用SharpZipLib进行文件的压缩和解压缩
我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手.只好耐下心来, ...
- Linux常用命令: zip、unzip 压缩和解压缩命令
Linux常用命令: zip.unzip 压缩和解压缩命令 zip的用法 基本用法是: zip [参数] [打包后的文件名] [打包的目录路径] 常用参数: -a 将文件转成ASCII模式 -F 尝试 ...
- java.util.zip_[Java 基础] 使用java.util.zip包压缩和解压缩文件
Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. Zi ...
最新文章
- 看图理解scrollTop,scrollLeft,clientWidth,clientHeight,offsetWidth,offsetHeight
- python批量下载文件只有1kb_Python 实现批量从不同的Linux服务器下载文件
- linux安全配置-将ssh服务隐藏于Internet(端口碰撞)
- 【旧文章搬运】Windows内核常见数据结构(线程相关)
- java 入侵 mysql_Java访问数据库Mysql
- solr的一些查询语法
- ipv6寻址_有类和无类寻址:IPV4寻址| 计算机网络
- 【LeetCode】15.Longest Common Prefix
- IDEA找到所有的断点
- 4. CSS id 选择器
- 无线路由器网络测试软件,如何简单快速测试家里无线路由器的网速和性能?
- 第一章c语言入门,linux C语言程序设计 从入门到放弃——入门第一章
- 原型制作与图解——墨刀工具
- 软件测试工作怎样修改本机IP,如何在命令行下更改IP地址
- autojs自定义Switch
- 思科:利用三层交换机实现vlan间路由
- app销售数据统计手机页面
- 医学图像分割UNet
- 分享8个强大的黑客技术学习网站
- 步进电动机速度调节和方向控制实验