Spring一行代码搞定图片url地址转换为Base64,超简单!!!!

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 这段内容讲述了如何将URL指向的图片转换为Base64字符串。首先通过`org.apache.commons.io.IOUtils`或Java标准库读取URL的字节流,然后用Java 8的`Base64`类编码。示例代码提供了两种实现方式:一种依赖Apache Commons IO,另一种仅使用Java内置类。在第二种方式中,自定义了`toByteArray()`方法处理输入流并转换为字节数组,最后关闭输入流释放资源。

image.png
我们首先通过URL类来创建一个指向图片资源的URL链接,然后使用IOUtils.toByteArray(url)将该链接对应的字节流转换为字节数组,最后使用Java 8新增的Base64类将其编码为Base64格式的字符串。

具体代码实现:

import org.apache.commons.io.IOUtils;
import java.net.URL;
import java.io.IOException;
import java.util.Base64;

/**
 * 将指定URL地址中的图片文件转换为Base64格式的字符串
 *
 * @param imageUrl 图片资源的URL地址
 * @return Base64格式的字符串
 * @throws IOException 如果读取URL链接对应的字节流时出现IO异常,则会抛出该异常
 */
public static String encodeToBase64(String imageUrl) throws IOException {
   
   
    // 使用 Java 8 引入的 Base64 类获取编码器,并将 URL 对象转换为字节数组后进行编码
    return Base64.getEncoder().encodeToString(IOUtils.toByteArray(new URL(imageUrl)));
}

如果你不想使用Apache Commons IO库,你可以使用Java标准库提供的java.net.URL和java.io.InputStream类和流操作来读取URL地址中的图片文件并将其编码为Base64格式的字符串,代码实现如下:


import java.io.InputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class ImageUtils {
   
   
    public static String encodeToBase64(String imageUrl) throws Exception {
   
   
        URL url = new URL(imageUrl);
        InputStream inputStream = url.openStream();
        byte[] bytes = toByteArray(inputStream);
        inputStream.close();
        return Base64.getEncoder().encodeToString(bytes);
    }

    private static byte[] toByteArray(InputStream inputStream) throws Exception {
   
   
        byte[] buffer = new byte[1024];
        int len;
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
   
   
            while ((len = inputStream.read(buffer)) != -1) {
   
   
                outputStream.write(buffer, 0, len);
            }
            return outputStream.toByteArray();
        }
    }
}

我们首先使用java.net.URL类创建一个指向图片资源的URL链接,然后使用该链接的openStream()方法打开一个输入流,从而可以读取到图片文件对应的字节流。接着,我们自己封装了一个toByteArray()方法,使用一个字节数组缓存循环读取输入流中的数据,并将读取到的数据写入到一个输出流中。最后,我们使用Java 8新增的Base64类将输出流中的字节编码为Base64字符串,并返回给调用者。需要注意的是,在读取完成后,我们需要显式地关闭输入流,以释放相关资源。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
基于阿里云,构建一个企业web应用上云经典架构,让IT从业者体验企业级架构的实战训练。
相关文章
|
1天前
|
Java Maven Spring
第一个Spring程序(代码篇)
第一个Spring程序(代码篇)
7 1
|
2天前
|
安全 Java 测试技术
Spring Security应用中的部分代码示例2
【6月更文挑战第12天】Spring Security应用中的部分代码示例2
13 5
|
2天前
|
安全 Java 数据库
Spring Security应用代码示例
【6月更文挑战第12天】Spring Security应用代码示例
14 3
|
7天前
|
Java 机器人 API
JAVA实现自动打开URL对应的网页并保存为图片-不借助第三方API
JAVA实现自动打开URL对应的网页并保存为图片-不借助第三方API
17 9
|
9天前
|
存储 前端开发 Java
Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想
Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想
|
10天前
|
XML JSON Java
图文并茂:解析Spring Boot Controller返回图片的三种方式
图文并茂:解析Spring Boot Controller返回图片的三种方式
13 0
|
22天前
|
Java Spring 容器
Spring AOP 代码案例
Spring AOP 代码案例
34 1
|
30天前
|
C++
【C++】在使用代码组装URL时,一定要注意的坑......
【C++】在使用代码组装URL时,一定要注意的坑......
18 0
|
30天前
uView queryParams 对象转URL参数
uView queryParams 对象转URL参数
22 0
|
30天前
|
JavaScript
vue截取URL中的参数
vue截取URL中的参数
25 0