Base64转MultipartFile

news/2024/7/24 11:06:22 标签: base64, MultipartFile

最近做了一个h5人脸采集demo,后端调用百度人脸检测API对图片质量进行把控,图片参数可以是base64类型或者URL形式。前端把图片压缩然后转为base64传回后端,后端进行质量检测合格后把base64转为MultipartFile上传到文件服务器。
在这里插入图片描述

Base64转MultipartFile

import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * @author Administrator
 */
public class Base64ToMultipartFile implements MultipartFile {
    private final byte[] fileContent;

    private final String extension;
    private final String contentType;


    /**
     * @param base64
     * @param dataUri     格式类似于: data:image/png;base64
     */
    public Base64ToMultipartFile(String base64, String dataUri) {
        this.fileContent = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8));
        this.extension = dataUri.split(";")[0].split("/")[1];
        this.contentType = dataUri.split(";")[0].split(":")[1];
    }

    public Base64ToMultipartFile(String base64, String extension, String contentType) {
        this.fileContent = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8));
        this.extension = extension;
        this.contentType = contentType;
    }

    @Override
    public String getName() {
        return "param_" + System.currentTimeMillis();
    }

    @Override
    public String getOriginalFilename() {
        return "file_" + System.currentTimeMillis() + "." + extension;
    }

    @Override
    public String getContentType() {
        return contentType;
    }

    @Override
    public boolean isEmpty() {
        return fileContent == null || fileContent.length == 0;
    }

    @Override
    public long getSize() {
        return fileContent.length;
    }

    @Override
    public byte[] getBytes() throws IOException {
        return fileContent;
    }

    @Override
    public ByteArrayInputStream getInputStream() throws IOException {
        return new ByteArrayInputStream(fileContent);
    }

    @Override
    public void transferTo(File file) throws IOException, IllegalStateException {
        try (FileOutputStream fos = new FileOutputStream(file)) {
            fos.write(fileContent);
        }
    }

}


使用

            final String[] base64Array = base64.split(",");

            // 判断图片是否符合要求 略
            checkImageQuality

            // base64转为流
            String dataUir = base64Array[0];
            String data = base64Array[1];
            MultipartFile multipartFile = new Base64ToMultipartFile(data, dataUir);

http://www.niftyadmin.cn/n/1691236.html

相关文章

Java实现使用Modbus4j+seroUtils读取Mudbus RTU/ASCII Over TCP/IP连接设备数据

使用Modbus4jseroUtils读取风速风向仪数据,现有设备IP,端口号,从机地址,寄存器读取开始地址,读取的寄存器数量。没有上述jar包可以自行搜索,网上资源挺多 /*** author chengy*/ Component public class Mod…

解决Spring RestTemplate请求相应内容中文乱码问题

参考:https://www.cnblogs.com/BillyYoung/p/10737081.html 1、原因 RestTemplate的默认构造方法初始化的StringHttpMessageConverter的默认字符集是ISO-8859-1,所以导致RestTemplate请求的响应内容会出现中文乱码。 2、解决方法 Springboot中Bean配…

RestTempLate 请求头、参数、请求体设置

参考:https://blog.csdn.net/qq_35642849/article/details/103821900 应用场景:通过微信公众号access_token接口获取到token,然后查询公众号的文章列表。 //region 2.获取文章列表String articleUrl "https://api.weixin.qq.com/cgi-bi…

辗转相除法(欧几里德法)

欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) gcd(b,a mod b)。 代码实现 public static int gcd (int a, int b) {// write code hereif(b 0) return a;return gcd(b, a…

Echarts柱状图解决数据差距过大不美观,处理数据为0时y轴只显示0~10的情况

问题一:数据差距过大不美观 解决方法:设置yAxis.type log ,使用log轴可以解决这个问题 把yAxis下的type属性设为log就可以调整数据差距过大的问题,我们可以看到y轴的数值呈现对数递增 问题二:久而久之&#xff0c…

Load balancer does not contain an instance for the service xxx-service

分两种可能性: 服务名不符合规范 在Nacos注册的服务名和配置文件的命名使用下划线“ _ ”,服务注册的时候使用“ _ ”可以注册,但被调用就不行了。重新命名为 ruoyi-business 问题解决,可以调用 SpringCloud版本问题 当你的s…

win10安装MySQL8 问题

1、安装时一直无法启动MySQL服务 查看日志内容: MySQL error 1042: Unable to connect to any of the specified MySQL hosts. Waiting 5 seconds before the next connection attempt… Retry 5: Attempting to connect to Mysqllocalhost:3306 with user root wi…

广度优先遍历类似于二叉树的_关于二叉树,你该了解这些

我们要开启新的征程了,大家跟上!说道二叉树,大家对于二叉树其实都很熟悉了,本文呢我也不想教科书式的把二叉树的基础内容在啰嗦一遍,所以一下我讲的都是一些比较重点的内容。相信只要耐心看完,都会有所收获…