package com.zhgd.xmgl.util; import cn.hutool.core.io.FileUtil; import org.apache.commons.codec.binary.Base64; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; public class Base64Util { public static String getURLImage(String imageUrl) { String base64String = ""; try { //new一个URL对象 URL url = new URL(imageUrl); //打开链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置请求方式为"GET" conn.setRequestMethod("GET"); //超时响应时间为5秒 conn.setConnectTimeout(20 * 1000); conn.setReadTimeout(20 * 1000); //通过输入流获取图片数据 InputStream inStream = conn.getInputStream(); //得到图片的二进制数据,以二进制封装得到数据,具有通用性 byte[] data = readInputStream(inStream); base64String = Base64.encodeBase64String(data); } catch (Exception e) { e.printStackTrace(); } return base64String; } /** * 本地文件(图片、excel等)转换成Base64字符串 * * @param imgPath */ public static String convertFileToBase64(String imgPath) { byte[] data = null; // 读取图片字节数组 try { InputStream in = new FileInputStream(imgPath); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } // 对字节数组进行Base64编码,得到Base64编码的字符串 String base64Str = Base64.encodeBase64String(data); return base64Str; } public static String getFileToBase64(String imgPath) { if (imgPath.indexOf("http") >= 0) { return getURLImage(imgPath); } else { return convertFileToBase64(imgPath); } } private static byte[] readInputStream(InputStream inStream) throws Exception { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); //创建一个Buffer字符串 byte[] buffer = new byte[1024]; //每次读取的字符串长度,如果为-1,代表全部读取完毕 int len = 0; //使用一个输入流从buffer里把数据读取出来 while ((len = inStream.read(buffer)) != -1) { //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度 outStream.write(buffer, 0, len); } //关闭输入流 inStream.close(); //把outStream里的数据写入内存 return outStream.toByteArray(); } public static File convertBase64ToFile(String fileBase64String, String filePath, String fileName) { BufferedOutputStream bos = null; FileOutputStream fos = null; File file; try { File dir = new File(filePath); // 判断文件目录是否存在 if (!dir.exists()) { FileUtil.mkdir(dir); } java.util.Base64.Decoder decoder = java.util.Base64.getMimeDecoder(); //BASE64Decoder decoder = new BASE64Decoder(); //byte[] bfile = decoder.decodeBuffer(fileBase64String); byte[] bfile = decoder.decode(fileBase64String); file = new File(filePath + File.separator + fileName); fos = new FileOutputStream(file); bos = new BufferedOutputStream(fos); bos.write(bfile); return file; } catch (Exception e) { e.printStackTrace(); return null; } finally { if (bos != null) { try { bos.close(); } catch (IOException e1) { e1.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e1) { e1.printStackTrace(); } } } } }