使用Java实现文件流转base64

 更新时间:2024年03月06日 08:21:03   作者:IT小辉同学  
这篇文章主要为大家详细介绍了如何使用Java实现文件流转base64效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

业务场景

假设有这样一个地址:http:127.0.0.1:8080/img/20240305/1.png

这个地址,我们浏览器访问后就会直接下载,但是,我们想要的是一个文件的预览地址,也就是通过这个地址可以直接访问图片,但是无需下载。

原理分析

为什么我们一访问就直接下载了图片呢,是因为图像输入流写入了响应流,一般是这样写的

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImageServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 指定图像的URL地址
        String imgUrl = "https://example.com/image.jpg";

        // 使用URL类打开指定URL的输入流
        try (InputStream inputStream = new URL(imgUrl).openStream()) {

            // 设置响应的内容类型为图像
            response.setContentType("image/jpeg");

            // 获取响应输出流
            try (OutputStream outputStream = response.getOutputStream()) {

                // 将图像输入流写入响应输出流
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, bytesRead);
                }
            }
        } catch (IOException e) {
            // 处理异常
            e.printStackTrace();
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
    }
}

这是一个简单的Servlet示例,它通过URL获取图像输入流,然后将该流写入HttpServletResponse的输出流。

所以,我们就要思考,既然获取不到图片路径直接进行访问,那我们可不可以直接将响应流获取到,然后转换为文件流,我们避开本地文件存储的环节,然后直接将文件流转换为base64呢?答案是可以的:

代码如下:

imgUrl="http:127.0.0.1:8080/img/20240305/1.png"
// 直接使用URL类获取图像流
InputStream inputStream = new URL(imgUrl).openStream();

先获取到图像流,然后进行数据转换:

private static String convertToBase64(InputStream inputStream) throws IOException {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        byteArrayOutputStream.write(buffer, 0, bytesRead);
    }

    // 使用Base64编码,并手动添加data:image/png;base64,前缀
    String base64Image = "data:image/png;base64," +
            Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray());

    return base64Image;
}

结语

最后,至于其他详细的业务逻辑,各位结合其他进行再度分析,这里只是抛砖引玉.

到此这篇关于使用Java实现文件流转base64的文章就介绍到这了,更多相关Java文件流转base64内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 反对使用Spring封装的多线程类原因

    反对使用Spring封装的多线程类原因

    这篇文章主要介绍了反对使用Spring封装的多线程类原因,文章围绕主题展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 详解Java分布式缓存系统中必须解决的四大问题

    详解Java分布式缓存系统中必须解决的四大问题

    分布式缓存系统是三高架构中不可或缺的部分,极大地提高了整个项目的并发量、响应速度,但它也带来了新的需要解决的问题,分别是: 缓存穿透、缓存击穿、缓存雪崩和缓存一致性问题。本文将详细讲解一下这四大问题,需要的可以参考一下
    2022-04-04
  • Spring5.2.x 源码本地环境搭建的方法步骤

    Spring5.2.x 源码本地环境搭建的方法步骤

    这篇文章主要介绍了Spring5.2.x 源码本地环境搭建的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java多态实现原理详细梳理总结

    Java多态实现原理详细梳理总结

    这篇文章主要介绍了Java多态实现原理详细梳理总结,多态是继封装、继承之后,面向对象的第三大特性,本文只总结了多态的实现原理,需要的朋友可以参考一下
    2022-06-06
  • 详解如何Java中实现Excel的注释和批注

    详解如何Java中实现Excel的注释和批注

    注释及批注是 Excel 中比较常用的功能,这篇文章主要为大家详细介绍了如何在Java中实现Excel的注释和批注,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • MyBatis查询数据库语句总结

    MyBatis查询数据库语句总结

    MyBatis是一种持久化框架,可以与许多不同类型的关系型数据库连接,下面这篇文章主要给大家介绍了关于MyBatis查询数据库语句的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Java String字符串补0或空格的实现代码

    Java String字符串补0或空格的实现代码

    这篇文章主要介绍了Java String字符串补0或空格的实现代码,代码简单易懂,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • Java实战之火车票预订系统的实现

    Java实战之火车票预订系统的实现

    这篇文章主要介绍了利用Java实现的火车票预订系统,文中用到了JSP 、Servlert、JQuery、Ajax 等技术,文中示例代码讲解详细,需要的可以参考一下
    2022-02-02
  • SpringBoot服务开启后通过端口访问无反应的解决

    SpringBoot服务开启后通过端口访问无反应的解决

    这篇文章主要介绍了SpringBoot服务开启后通过端口访问无反应的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 关于mybatisPlus yml配置方式

    关于mybatisPlus yml配置方式

    这篇文章主要介绍了mybatisPlus yml配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论