幽兰生空谷
--绝世独自开

Java图片或文件转Base64字符串进行http传输,工具类示例

背景介绍:

有些图片是存放在本地服务器或FTP服务器,并没有图片网络链接,这个时候应该怎么才能通过接口发送到对方的接口里面的?

方案:

采用将图片或文件转换成Base64字符串进行传输,示例代码:

package com.hdyy.timetask.ncToXinWangTimeTask.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Objects;

@Component
@Slf4j
public class ImageUtil {
    /**
     * 把文件转为 base64
     *
     * @param imagePath 文件全路径名
     * @return base64 字符串
     */
    public static String imageToBase64(String imagePath) {

        try {
            File file = new File(imagePath);
            FileInputStream fis = new FileInputStream(file);
            byte[] imageBytes = new byte[fis.available()];
            fis.read(imageBytes);
            fis.close();
            return Base64.encodeBase64String(imageBytes);
        } catch (IOException e) {
            log.error("图片转 base64 出现异常", e);
            return null;
        }
    }

    /**
     * 把文件转为 base64
     *
     * @param path 文件全路径名
     * @return base64 字符串
     * @throws Exception 抛出异常
     */
    public static String convertBase64(String path) throws Exception {
        if (StringUtils.isBlank(path)) {
            throw new Exception("path is null");
        } else {
            return convertBase64(new File(path));
        }
    }

    /**
     * 文件转为 Base64
     *
     * @param file 文件
     * @return Base64 字符串
     * @throws Exception 抛出异常
     */
    public static String convertBase64(File file) throws Exception {
        if (Objects.isNull(file)) {
            throw new Exception("file is null");
        } else if (!file.exists()) {
            throw new Exception("file does not exist");
        } else {
            byte[] data = FileUtils.readFileToByteArray(file);
            return Base64.encodeBase64String(data);
        }
    }

    /**
     * base64 字符串转图片文件 File
     *
     * @param code base64 字符串
     * @param path 生成图片的全名
     * @return 生成的文件
     * @throws IOException 抛出异常
     */
    public static File base64ToFile(String code, String path) throws IOException {
        File file = new File(path);
        byte[] data = Base64.decodeBase64(code);
        FileUtils.writeByteArrayToFile(file, data);
        return file;
    }

    /**
     * 校验图片的宽度和高度是否符合要求(具体可按实际要求修改判断逻辑)
     *
     * @param path 图片全路径
     * @return 符合要求:true;否则:false
     */
    public static boolean checkImageWidthAndHeight(String path) {
        try {
            File imageFile = new File(path);
            BufferedImage bufferedImage = ImageIO.read(imageFile);

            int width = bufferedImage.getWidth();
            int height = bufferedImage.getHeight();
            log.info("图片:[{}], 宽度:[{}] 像素, 高度:[{}] 像素", path, width, height);

            // 假如图片要求是正方形,且不低于 300 * 300,不高于 800 * 800
            if (width != height) {
                log.warn("图片不是正方形");
                return false;
            }
            if (width < 300) {
                log.warn("图片低于 300 * 300,不符合要求");
                return false;
            }
            if (width > 800) {
                log.warn("图片高于 800 * 800,不符合要求");
                return false;
            }

            return true;
        } catch (IOException e) {
            log.error("校验图片规格出现异常", e);
            return false;
        }
    }

    public static void main(String[] args) throws Exception {

        try {
            // 校验图片是否符合规范
            String basePath = "D:\\";
            String fileName = "test.jpeg";
            String fullPath = basePath + File.separator + fileName;
            boolean res = checkImageWidthAndHeight(fullPath);
            if (!res) {
                log.warn("图片不符合规范");
            }

            // 图片转 base64
            String base64Str = convertBase64(fullPath);
            log.info("base64 字符串:[{}]", base64Str);

            // base64 字符串转图片文件 File
            // 生成的图片
            String convertPath = basePath + File.separator + "convert.jpg";
            base64ToFile(base64Str, convertPath);

            // 图片转 base64
            log.info("base64 字符串:[{}]", imageToBase64(fullPath));
        } catch (IOException e) {
            log.error("图片转化测试异常", e);
        }
    }
}

代码略微老旧,可以采取其他工具类进行替换,上面的代码,需要导入两个依赖

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.11</version>
        </dependency>

选取自网络

赞(1) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Java图片或文件转Base64字符串进行http传输,工具类示例》
文章链接:https://www.itheibai.com/archives/1629
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。

评论 抢沙发

评论前必须登录!

 

养成“打赏”的好习惯,从我做起!

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册