文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-10-01 08:40

关注

需求是把服务器的图片链接或者网上的图片链接地址转为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;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));}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;}public static String encode(byte[] image) {BASE64Encoder decoder = new BASE64Encoder();return replaceEnter(decoder.encode(image));}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));}        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;    }        public static String encode(byte[] image){        BASE64Encoder decoder = new BASE64Encoder();        return replaceEnter(decoder.encode(image));    }        public static String replaceEnter(String str){        String reg ="[\n-\r]";        Pattern p = Pattern.compile(reg);        Matcher m = p.matcher(str);        return m.replaceAll("");    }}

来源地址:https://blog.csdn.net/weixin_45559862/article/details/127628944

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯