接口接收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相关推荐

  1. 使用GZipStream实现压缩和解压缩

    概述 之前做项目,涉及到存入到数据库或者http传输的数据量比较大,这个时候,就需要考虑在存入数据库或者发送传输之前,将数据压缩下,当从数据库中取出时,再解压还原数据.特地找了下发现有GZipStre ...

  2. java 解压与压缩代码_Java实现多文件压缩和解压缩代码详解

    Java实现多文件压缩和解压缩代码 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...

  3. asp.net在线压缩和解压缩的实现

    我们经常会遇到批量上传的问题,也会遇到将某个目录下所有文件都上传到服务器上的问题.那么,如何解决此类问题呢?以前的技术一般采用ActiveX等方式,这里我采用SharpZlib来实现,听说VS2005 ...

  4. Qt中用QuaZip来压缩和解压缩文件

    1.简介 QuaZIP是使用Qt,C++对ZLIB进行简单封装的用于压缩ZIP以及解压缩ZIP的开源库.如果你的Qt项目当中用到了压缩以及解压缩ZIP的话你可以考虑选择使用它. 官方主页:http:/ ...

  5. linux压缩和解压缩类命令|--zip/unzip指令

    zip/unzip指令 说明: zip 用于压缩文件,unzip用于解压,这个项目打包发布常用 基本语法 zip [option] xxx.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令) ...

  6. 【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )

    文章目录 一.开启资源压缩 二.启用严格模式的资源引用检查 三.自定义保留/移除资源配置 四.资源压缩效果 五.完整配置 1.keep.xml 配置 2.build.gradle 构建脚本 六.参考资 ...

  7. Centos之压缩和解压缩命令

    常用压缩格式:.zip .gz .bz2 常用压缩格式:.tar.gz  .tar.bz2 1.zip格式压缩 zip压缩文件名 源文件 压缩文件 zip -r 压缩文件名 源目录 压缩目录 [roo ...

  8. 在C#中利用SharpZipLib进行文件的压缩和解压缩

    我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手.只好耐下心来, ...

  9. Linux常用命令: zip、unzip 压缩和解压缩命令

    Linux常用命令: zip.unzip 压缩和解压缩命令 zip的用法 基本用法是: zip [参数] [打包后的文件名] [打包的目录路径] 常用参数: -a 将文件转成ASCII模式 -F 尝试 ...

  10. java.util.zip_[Java 基础] 使用java.util.zip包压缩和解压缩文件

    Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. Zi ...

最新文章

  1. 看图理解scrollTop,scrollLeft,clientWidth,clientHeight,offsetWidth,offsetHeight
  2. python批量下载文件只有1kb_Python 实现批量从不同的Linux服务器下载文件
  3. linux安全配置-将ssh服务隐藏于Internet(端口碰撞)
  4. 【旧文章搬运】Windows内核常见数据结构(线程相关)
  5. java 入侵 mysql_Java访问数据库Mysql
  6. solr的一些查询语法
  7. ipv6寻址_有类和无类寻址:IPV4寻址| 计算机网络
  8. 【LeetCode】15.Longest Common Prefix
  9. IDEA找到所有的断点
  10. 4. CSS id 选择器
  11. 无线路由器网络测试软件,如何简单快速测试家里无线路由器的网速和性能?
  12. 第一章c语言入门,linux C语言程序设计 从入门到放弃——入门第一章
  13. 原型制作与图解——墨刀工具
  14. 软件测试工作怎样修改本机IP,如何在命令行下更改IP地址
  15. autojs自定义Switch
  16. 思科:利用三层交换机实现vlan间路由
  17. app销售数据统计手机页面
  18. 医学图像分割UNet
  19. 分享8个强大的黑客技术学习网站
  20. 步进电动机速度调节和方向控制实验

热门文章

  1. 为什么Java的图标是一杯咖啡呢?
  2. Androidnbsp;TabHostnbsp;和amp;nbs…
  3. Python matplotlib绘图如何显示中文的问题【有报错没有解决】
  4. ae打开模板显示不出来_打开AE模板提示缺少rsmb pro插件的解决办法
  5. linux系统日志文件介绍
  6. Java读取环境变量
  7. 二次指数平滑法 C++
  8. 导航栏实现页面的动态切换
  9. Oracle 官网登录账号
  10. Python基础1_沙窝李的王