You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
3.1 KiB
134 lines
3.1 KiB
3 years ago
|
package com.fr.plugin.xxx.util;
|
||
|
|
||
|
import com.fr.base.Base64;
|
||
|
|
||
|
import java.io.*;
|
||
|
|
||
|
|
||
|
public class Base64Utils {
|
||
|
|
||
|
/** */
|
||
|
/**
|
||
|
* 文件读取缓冲区大小
|
||
|
*/
|
||
|
private static final int CACHE_SIZE = 1024;
|
||
|
|
||
|
/** */
|
||
|
/**
|
||
|
* <p>
|
||
|
* BASE64字符串解码为二进制数据
|
||
|
* </p>
|
||
|
*
|
||
|
* @param base64
|
||
|
* @return
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public static byte[] decode(String base64) throws Exception {
|
||
|
return Base64.decode(base64);
|
||
|
}
|
||
|
|
||
|
/** */
|
||
|
/**
|
||
|
* <p>
|
||
|
* 二进制数据编码为BASE64字符串
|
||
|
* </p>
|
||
|
*
|
||
|
* @param bytes
|
||
|
* @return
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public static String encode(byte[] bytes) throws Exception {
|
||
|
return new String(Base64.encode(bytes));
|
||
|
}
|
||
|
|
||
|
/** */
|
||
|
/**
|
||
|
* <p>
|
||
|
* 将文件编码为BASE64字符串
|
||
|
* </p>
|
||
|
* <p>
|
||
|
* 大文件慎用,可能会导致内存溢出
|
||
|
* </p>
|
||
|
*
|
||
|
* @param filePath 文件绝对路径
|
||
|
* @return
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public static String encodeFile(String filePath) throws Exception {
|
||
|
byte[] bytes = fileToByte(filePath);
|
||
|
return encode(bytes);
|
||
|
}
|
||
|
|
||
|
/** */
|
||
|
/**
|
||
|
* <p>
|
||
|
* BASE64字符串转回文件
|
||
|
* </p>
|
||
|
*
|
||
|
* @param filePath 文件绝对路径
|
||
|
* @param base64 编码字符串
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public static void decodeToFile(String filePath, String base64) throws Exception {
|
||
|
byte[] bytes = decode(base64);
|
||
|
byteArrayToFile(bytes, filePath);
|
||
|
}
|
||
|
|
||
|
/** */
|
||
|
/**
|
||
|
* <p>
|
||
|
* 文件转换为二进制数组
|
||
|
* </p>
|
||
|
*
|
||
|
* @param filePath 文件路径
|
||
|
* @return
|
||
|
* @throws Exception
|
||
|
*/
|
||
|
public static byte[] fileToByte(String filePath) throws Exception {
|
||
|
byte[] data = new byte[0];
|
||
|
File file = new File(filePath);
|
||
|
if (file.exists()) {
|
||
|
FileInputStream in = new FileInputStream(file);
|
||
|
ByteArrayOutputStream out = new ByteArrayOutputStream(2048);
|
||
|
byte[] cache = new byte[CACHE_SIZE];
|
||
|
int nRead = 0;
|
||
|
while ((nRead = in.read(cache)) != -1) {
|
||
|
out.write(cache, 0, nRead);
|
||
|
out.flush();
|
||
|
}
|
||
|
out.close();
|
||
|
in.close();
|
||
|
data = out.toByteArray();
|
||
|
}
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
/** */
|
||
|
/**
|
||
|
* <p>
|
||
|
* 二进制数据写文件
|
||
|
* </p>
|
||
|
*
|
||
|
* @param bytes 二进制数据
|
||
|
* @param filePath 文件生成目录
|
||
|
*/
|
||
|
public static void byteArrayToFile(byte[] bytes, String filePath) throws Exception {
|
||
|
InputStream in = new ByteArrayInputStream(bytes);
|
||
|
File destFile = new File(filePath);
|
||
|
if (!destFile.getParentFile().exists()) {
|
||
|
destFile.getParentFile().mkdirs();
|
||
|
}
|
||
|
destFile.createNewFile();
|
||
|
OutputStream out = new FileOutputStream(destFile);
|
||
|
byte[] cache = new byte[CACHE_SIZE];
|
||
|
int nRead = 0;
|
||
|
while ((nRead = in.read(cache)) != -1) {
|
||
|
out.write(cache, 0, nRead);
|
||
|
out.flush();
|
||
|
}
|
||
|
out.close();
|
||
|
in.close();
|
||
|
}
|
||
|
|
||
|
}
|