125 lines
4.1 KiB
Java
125 lines
4.1 KiB
Java
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();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
}
|