首页 > 编程语言 >java使用hutool把服务器图片链接转为base64编码

java使用hutool把服务器图片链接转为base64编码

时间:2023-08-11 18:01:21浏览次数:47  
标签:return String base64 outStream import java 图片链接 null

java使用hutool把服务器图片链接转为base64编码_java

需求是把服务器的图片链接或者网上的图片链接地址转为base64位编码方便前端操作

建议使用方法一

base64编码转为图片在线网址

https://imgtobase64.d777.com/

方法一:使用hutool的HttpResponse方法

1.1 引入依赖


<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.22</version>
</dependency>

1.2 代码

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import sun.misc.BASE64Encoder;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
@Author ekkcole

@remark 图片链接转为base64编码
*/
public class UrlToBase64Util {
//base64前缀
private static final String BASE64_PREFIX="data:image/png;base64,";
public static void main(String[] args) throws Exception {
String url="https://localhost:8080/upload/file/20221101/test.png";
System.out.println(BASE64_PREFIX+imageUrlToBase64(url));
}
/**
图片URL转Base64编码

@param imgUrl 图片URL
@return Base64编码
/
public static String imageUrlToBase64(String imgUrl) {
InputStream is = null;
ByteArrayOutputStream outStream = null;
try {
if (!ObjectUtils.isEmpty(imgUrl)) {
HttpResponse res = HttpRequest.get(imgUrl).execute();
// 获取输入流
is = res.bodyStream();
outStream = new ByteArrayOutputStream();
//创建一个Buffer字符串
byte[] buffer = new byte[1024];
//每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
//使用输入流从buffer里把数据读取出来
while ((len = is.read(buffer)) != -1) {
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outStream.write(buffer, 0, len);
}
// 对字节数组Base64编码
return encode(outStream.toByteArray());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
if (outStream != null) {
outStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
/*
图片转字符串

@param image 图片Buffer
@return Base64编码
/
public static String encode(byte[] image) {
BASE64Encoder decoder = new BASE64Encoder();
return replaceEnter(decoder.encode(image));
}
/*
字符替换

@param str 字符串
@return 替换后的字符串
/
public static String replaceEnter(String str) {
String reg = "[\n-\r]";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
return m.replaceAll("");
}
}




方法二:使用自带的请求,有的网址会报错,建议用第一种

import org.springframework.util.ObjectUtils;
import sun.misc.BASE64Encoder;
import java.io.;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UrlToBase64 {
//base64前缀
private static final String BASE64_PREFIX="data:image/png;base64,";
public static void main(String[] args) throws Exception {
String url="https://localhost:8080/upload/file/20221101/test.png";
System.out.println(BASE64_PREFIX+imageUrlToBase64(url));
}
/**
图片URL转Base64编码
@param imgUrl 图片URL
@return Base64编码
/
public static String imageUrlToBase64(String imgUrl) {
URL url = null;
InputStream is = null;
ByteArrayOutputStream outStream = null;
HttpURLConnection httpUrl = null;
try {
if (!ObjectUtils.isEmpty(imgUrl)) {
// 如果服务器图片地址带有中文,最好处理一下
String[] argss = imgUrl.split("/");
String name1 = argss[argss.length - 1];
String name2 = java.net.URLEncoder.encode(name1, "utf-8");
// 处理中文名
String newUrl = imgUrl.replace(name1, name2);
url = new URL(newUrl);
httpUrl = (HttpURLConnection) url.openConnection();
httpUrl.connect();
httpUrl.getInputStream();
is = httpUrl.getInputStream();
outStream = new ByteArrayOutputStream();
//创建一个Buffer字符串
byte[] buffer = new byte[1024];
//每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
//使用输入流从buffer里把数据读取出来
while ((len = is.read(buffer)) != -1) {
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outStream.write(buffer, 0, len);
}
// 对字节数组Base64编码
return encode(outStream.toByteArray());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(is != null) {
is.close();
}
if(outStream != null) {
outStream.close();
}
if(httpUrl != null) {
httpUrl.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
/*
图片转字符串
@param image 图片Buffer
@return Base64编码
/
public static String encode(byte[] image){
BASE64Encoder decoder = new BASE64Encoder();
return replaceEnter(decoder.encode(image));
}
/*
字符替换
@param str 字符串
@return 替换后的字符串
*/
public static String replaceEnter(String str){
String reg ="[\n-\r]";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
return m.replaceAll("");
}
}

标签:return,String,base64,outStream,import,java,图片链接,null
From: https://blog.51cto.com/u_16173281/7050788

相关文章

  • Java 集合
    Java集合也叫作容器,就是专门用来存放对象的;也就是说,没有办法存放基础数据类型int,必须要存放包装类Integer。Java集合主要是由两大接口派生而来:一个是Collecton接口,主要用于存放单一元素;另一个是Map接口,主要用于存放键值对。对于Collection接口,下面又有三个主要的子接......
  • JSON for java入门总结
    一、JSON介绍JSON(JavaScriptObjectNotation),类似于XML,是一种数据交换格式,比如JAVA产生了一个数据想要给JavaScript,则除了利用XML外,还可以利用JSON;JSON相比XML的优势是表达起来很简单;官网:http://www.json.org/JSON是AJAX中的X(就是可以取代XML);     ------出自JSON创......
  • 深入分析 Java I/O 的工作机制
                                  深入分析JavaI/O的工作机制I/O问题是任何编程语言都无法回避的问题,可以说I/O问题是整个人机交互的核心问题,因为I/O是机器获取和交换信息的主要渠道。在当今这个数据大爆炸时代,I/O问题尤其突出,很容易成为一......
  • JAVA开发者最常去的25个英文网站
    -InfoIT新闻http://www.apache.org/-Apache基金会http://www.springsource.org/-广大Java开发者喜爱的Springhttp://www.hibernate.org/-开源ORM框架http://sourceforge.net/-开源技术的集结地http://www.javaalmanac.com–Java开发者年鉴一书的在线版本.......
  • java.sql.SQLFeatureNotSupportedException: 这个 org.postgresql.jdbc.PgResultSet.g
    具体报错为:Errorattemptingtogetcolumn'DISEASENAME'fromresultset.Cause:java.sql.SQLFeatureNotSupportedException:这个org.postgresql.jdbc.PgResultSet.getNString(int)方法尚未被实作。;这个org.postgresql.jdbc.PgResultSet.getNString(int)方法尚未被实......
  • JAVA画弹框
    packagecn.dbd;importjavax.swing.JPanel;//1.importjavax.swing.JFrame;//游戏窗口publicclassWorldextendsJPanel{//2.publicstaticvoidmain(String[]args){JFrameframe=newJFrame();//3.Worldworld=newWorld();//分配窗口......
  • 通过 Javacore 诊断线程挂起等性能问题
    Javacore与WebSphereCommerce性能问题近年来,依据WebSphereCommerce(以下简称为WC)搭建的电子商务网站系统日益增多。由于系统本身的复杂性,一旦系统出现问题,尤其是性能问题,问题诊断和定位就会非常困难。下图所示为由WC系统为核心搭建的电子商务网站的一般逻辑架构,如图......
  • kettle 调用ssl异常javax.net.ssl.SSLHandshakeException: No appropriate protocol (
    javax.net.ssl.SSLHandshakeException:Noappropriateprotocol(protocolisdisabledorciphersuitesareinappropriate  调用kettle发送邮件的时候本地没问题 服务器报异常 查看很多都是要改动 D:\java\jdk\jre\lib\security 下面的 java.security文件 ......
  • java线上应用故障性异常处理,经验总结
    一、摘要由于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降、部分(或所有)接口超时或卡死等。其中部分故障隐藏颇深,对运维和开发造成长期困扰。笔者根据自己的学习和实践,总结出一套行之有效的“逐步排除”的方......
  • JAVA 内存详解 (理解 JVM 如何使用 Windows 和 Linux 上的本机内存)
    级别:中级AndrewHall ,软件工程师,IBM2009年5月11日Java™堆耗尽并不是造成 java.lang.OutOfMemoryError 的惟一原因。如果本机内存 耗尽,则会发生普通调试技巧无法解决的 OutOfMemoryError 。本文将讨论本机内存的概念,Java运行时如何使用它,它被耗......