我们首先通过URL类来创建一个指向图片资源的URL链接,然后使用IOUtils.toByteArray(url)将该链接对应的字节流转换为字节数组,最后使用Java 8新增的Base64类将其编码为Base64格式的字符串。
具体代码实现:
import org.apache.commons.io.IOUtils;
import java.net.URL;
import java.io.IOException;
import java.util.Base64;
/**
* 将指定URL地址中的图片文件转换为Base64格式的字符串
*
* @param imageUrl 图片资源的URL地址
* @return Base64格式的字符串
* @throws IOException 如果读取URL链接对应的字节流时出现IO异常,则会抛出该异常
*/
public static String encodeToBase64(String imageUrl) throws IOException {
// 使用 Java 8 引入的 Base64 类获取编码器,并将 URL 对象转换为字节数组后进行编码
return Base64.getEncoder().encodeToString(IOUtils.toByteArray(new URL(imageUrl)));
}
如果你不想使用Apache Commons IO库,你可以使用Java标准库提供的java.net.URL和java.io.InputStream类和流操作来读取URL地址中的图片文件并将其编码为Base64格式的字符串,代码实现如下:
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class ImageUtils {
public static String encodeToBase64(String imageUrl) throws Exception {
URL url = new URL(imageUrl);
InputStream inputStream = url.openStream();
byte[] bytes = toByteArray(inputStream);
inputStream.close();
return Base64.getEncoder().encodeToString(bytes);
}
private static byte[] toByteArray(InputStream inputStream) throws Exception {
byte[] buffer = new byte[1024];
int len;
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
return outputStream.toByteArray();
}
}
}
我们首先使用java.net.URL类创建一个指向图片资源的URL链接,然后使用该链接的openStream()方法打开一个输入流,从而可以读取到图片文件对应的字节流。接着,我们自己封装了一个toByteArray()方法,使用一个字节数组缓存循环读取输入流中的数据,并将读取到的数据写入到一个输出流中。最后,我们使用Java 8新增的Base64类将输出流中的字节编码为Base64字符串,并返回给调用者。需要注意的是,在读取完成后,我们需要显式地关闭输入流,以释放相关资源。