使用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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
MyBatis注解开发-@Insert和@InsertProvider的使用
这篇文章主要介绍了MyBatis注解开发-@Insert和@InsertProvider的使用,具有很好的参考价值,希望对大家有所帮助。2022-07-07java多线程并发中使用Lockers类将多线程共享资源锁定
Lockers在多线程编程里面一个重要的概念是锁定,如果一个资源是多个线程共享的,为了保证数据的完整性,在进行事务性操作时需要将共享资源锁定,这样可以保证在做事务性操作时只有一个线程能对资源进行操作,下面看一个示例2014-01-01SpringBoot中过滤器Filter+JWT令牌实现登录验证
本文主要介绍了SpringBoot中过滤器Filter+JWT令牌实现登录验证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-04-04解决IDEA 2020.1版本 maven Test命令出现导包错误的问题
这篇文章主要介绍了IDEA 2020.1版本 maven Test命令出现导包错误的问题及解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08SpringBoot中EasyExcel实现execl导入导出
本文主要介绍了SpringBoot中EasyExcel实现execl导入导出,实现了如何准备环境、创建实体类、自定义转换器以及编写导入逻辑的步骤和示例代码,感兴趣的可以了解下2023-06-06
最新评论