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

这篇具有很好参考价值的文章主要介绍了java使用hutool把服务器图片链接转为base64编码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

建议使用方法一

base64编码转为图片在线网址
https://imgtobase64.d777.com/文章来源地址https://www.toymoban.com/news/detail-522288.html

方法一:使用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("");
    }


}

到了这里,关于java使用hutool把服务器图片链接转为base64编码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue 如何使用WebSocket与服务器建立链接 持续保持通信

    浏览器通过JavaScript向服务器发出建立WebSocket链接的请求,链接建立后,客户端和服务器端就可以通过TCP链接直接交互数据。WebSocket链接后可以通过 send() 方法来向服务器发送数据,并通过 onnessage 事件来接受服务器返回的数据。 WebSocket - Web API 接口参考 | MDN

    2024年01月18日
    浏览(43)
  • 【Ubuntu】ubuntu22.04使用VNC链接服务器远程桌面

    本地主要需要一个VNC客户端,用来远程连接服务器端的VNC(在不安装Web版本VNC情况下)。VNC客户端下载地址: VNC客户端下载 在远程服务器控制台中安装Xfce桌面(这个桌面环境比较轻量化,博主用的88块钱的腾讯云服务器) 注意更新软件源 在远程服务器控制台中安装 tightvn

    2024年02月03日
    浏览(61)
  • 图片存储解决方案之一使用nginx搭建图片服务器(一)

    常见的图片存储方案: 方案一:使用nginx搭建图片服务器 方案二:使用开源的分布式文件存储系统,例如Fastdfs、HDFS等 方案三:使用云存储,例如阿里云、七牛云等 首先下载Nginx http://nginx.org/en/download.html http://nginx.org/en/download.html?login=from_csdn    然后解压,如下图所示: 双

    2024年02月16日
    浏览(51)
  • Android使用Glide类加载服务器中的图片

    Glide类用于从服务器中获取图片并加载进ImageView。 一、添加依赖 Glide为 第三方框架 ,使用时需添加依赖: 在 Gradle Scripts / build.gradle(Module:app) / dependencies方法 中添加 添加后会下载。 二、获取权限 获取服务器中的图片需要 申请(静态声明)网络权限 ,在清单文件中添加 三、

    2024年02月06日
    浏览(43)
  • vue2使用 tinymce富文本编辑器-图片上传、粘贴图片上传致服务器

    1.安装tinymce富文本编辑器插件 npm i tinymce npm i @tinymce/tinymce-vue 2.创建Editor.js文件 封装组件 以便使用 3.汉化包 (我放在public/tynymce/langs文件夹里) 4.vue组件中使用 本次记录重点在于 上传图片方法 需要区分工具栏中图片上传方法 以及 粘贴进去的图片也需要走上传方法。两个方

    2024年02月09日
    浏览(66)
  • 手把手教你如何使用Unity搭建简易图片服务器

    目录 引言 服务器 WAMP简介 WAMP的配置与使用 主要的WAMP集成环境有: 正文 1、外部工具素材准备 首先下载并安装 WAMP  图片路径设置 2、创建 Unity 工程 将图片加载到 Unity 项目中: 代码块 运行效果如下: 网络游戏中,服务器的搭建尤为重要,无论是授权服务器,还是非授权服务

    2024年02月02日
    浏览(64)
  • Vue中实现图片上传,上传后的图片回显,存储图片到服务器 【使用对象存储OSS】

    前言 以下只提供一种思路,对新手可能不太友好。 这里将前端Vue上传的图片直接存储到服务器上, Alibaba Cloud OSS : 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储

    2024年02月06日
    浏览(74)
  • Java教程:如何读取服务器文件并推送到前端并下载,图片格式以浏览器渲染模式

    ----在我们做文件上传时,通常会保存文件的相对路径在数据库中,然后返回前端http访问路径,来对文件进行下载或图片预览功能,但是有时候我们并不想直接返回文件访问地址给前端,这就用到了Java当中的文件输入输出流,将文件以流的方式响应给浏览器,并渲染出图片或

    2024年02月03日
    浏览(61)
  • SQL Server链接服务器

    SQL Server 中存在可以链接到其他服务器的选项,一般情况下是用来与别的 SQL Server 数据库相连接,但是有时候也可以与一个Microsoft Access数据库 相连接。这样的操作是通过链接服务器节点实现的。 链接服务器节点可以连接到另一个数据库,通常/通常在不同的机器上运行,也

    2023年04月09日
    浏览(69)
  • SecureCRT ssh链接服务器

    说明: 一般的密码方式登录容易被密码暴力破解。所以一般我们会将 SSH 的端口设置为默认22以外的端口,或者禁用root账户登录。其实可以通过密钥登录这种方式来更好地保证安全。 密钥形式登录的原理是:利用密钥生成器制作一对密钥——一只公钥和一只私钥。将公钥添加

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包