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();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|