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从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
28天前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
59 4
|
1月前
ext portal+dwr+spring实现个性主页面拖拉效果的核心代码
ext portal+dwr+spring实现个性主页面拖拉效果的核心代码
44 6
|
14天前
|
缓存 监控 Java
|
1月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
403 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
1月前
|
存储 Java 程序员
SpringIOC和DI的代码实现,Spring如何存取对象?@Controller、@Service、@Repository、@Component、@Configuration、@Bean DI详解
本文详细讲解了Spring框架中IOC容器如何存储和取出Bean对象,包括五大类注解(@Controller、@Service、@Repository、@Component、@Configuration)和方法注解@Bean的用法,以及DI(依赖注入)的三种注入方式:属性注入、构造方法注入和Setter注入,并分析了它们的优缺点。
28 0
SpringIOC和DI的代码实现,Spring如何存取对象?@Controller、@Service、@Repository、@Component、@Configuration、@Bean DI详解
|
2月前
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
|
3月前
|
机器学习/深度学习 文字识别 前端开发
基于 Spring Boot 3.3 + OCR 实现图片转文字功能
【8月更文挑战第30天】在当今数字化信息时代,图像中的文字信息越来越重要。无论是文档扫描、名片识别,还是车辆牌照识别,OCR(Optical Character Recognition,光学字符识别)技术都发挥着关键作用。本文将围绕如何使用Spring Boot 3.3结合OCR技术,实现图片转文字的功能,分享工作学习中的技术干货。
180 2
|
3月前
|
安全 Java 数据安全/隐私保护
|
3月前
|
Java Spring
Spring boot +Thymeleaf 本地图片加载失败(图片路径)的问题及解决方法
这篇文章详细讲解了在Spring Boot应用程序中本地图片无法加载的问题原因,并提供了两个示例来说明如何通过使用正确的相对路径或Thymeleaf语法来解决图片路径问题。
|
3月前
|
Java Spring XML
掌握面向切面编程的秘密武器:Spring AOP 让你的代码优雅转身,横切关注点再也不是难题!
【8月更文挑战第31天】面向切面编程(AOP)通过切面封装横切关注点,如日志记录、事务管理等,使业务逻辑更清晰。Spring AOP提供强大工具,无需在业务代码中硬编码这些功能。本文将深入探讨Spring AOP的概念、工作原理及实际应用,展示如何通过基于注解的配置创建切面,优化代码结构并提高可维护性。通过示例说明如何定义切面类、通知方法及其应用时机,实现方法调用前后的日志记录,展示AOP在分离关注点和添加新功能方面的优势。
53 0