Base64文件流、文件二进制流字符串转文件并保存本地-----相关方法
package com.lingxu.module.picture.util;
import org.apache.commons.lang.ArrayUtils;
import java.io.*;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
/**
* @author 阿杰
* @effect 文件流转换
* @date 2022/2/26
* @versions 1.0
*/
public class FileUtil {
/**
* 将接收的字符串转换成图片保存
* @param imgStr base64 或者 二进制字符串
* @param imgPath 图片的保存路径
* @param imgName 图片的名称
* @return
* 1:保存正常
* 0:保存失败
*/
public static int saveToImgByStr(String imgStr,String imgPath,String imgName)throws Exception{
try {
System.out.println("===imgStr.length()====>" + imgStr.length()
+ "=====imgStr=====>" + imgStr);
} catch (Exception e) {
e.printStackTrace();
}
int stateInt = 1;
if(imgStr != null && imgStr.length() > 0){
try {
// 将base64转为文件byte
byte[] imgByte = base64ToImage(imgStr);
//将二进制流转为文件的byte byte[] imgByte=hex2byte(imgStr);
InputStream in = new ByteArrayInputStream(imgByte);
File file=new File(imgPath,imgName);//可以是任何图片格式.jpg,.png等
FileOutputStream fos=new FileOutputStream(file);
byte[] b = new byte[1024];
int nRead = 0;
while ((nRead = in.read(b)) != -1) {
fos.write(b, 0, nRead);
}
fos.flush();
fos.close();
in.close();
} catch (Exception e) {
stateInt = 0;
e.printStackTrace();
}
}
return stateInt;
}
/**
* 二进制转字符串
* @param b
* @return
*/
public static String byte2hex(byte[] b) // 二进制转字符串
{
StringBuffer sb = new StringBuffer();
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = Integer.toHexString(b[n] & 0XFF);
if (stmp.length() == 1) {
sb.append("0" + stmp);
} else {
sb.append(stmp);
}
}
return sb.toString();
}
/**
* 字符串转二进制
* @param str 要转换的字符串
* @return 转换后的二进制数组
*/
public static byte[] hex2byte(String str) { // 字符串转二进制
if (str == null) {
return null;
}
str = str.trim();
int len = str.length();
if (len == 0 || len % 2 == 1) {
return null;
}
byte[] b = new byte[len / 2];
try {
for (int i = 0; i < str.length(); i += 2) {
b[i / 2] = (byte) Integer
.decode("0X" + str.substring(i, i + 2)).intValue();
}
return b;
} catch (Exception e) {
return null;
}
}
/**
* 对字节数组字符串进行Base64解码并生成图片
* @param imgStr 图片数据
* @return
*/
public static byte[] base64ToImage(String imgStr) {
try {
// Base64解码
byte[] b = Base64.getDecoder().decode(imgStr);
for (int i = 0; i < b.length; ++i) {
// 调整异常数据
if (b[i] < 0) {
b[i] += 256;
}
}
return b;
} catch (Exception e) {
e.printStackTrace();
return ArrayUtils.EMPTY_BYTE_ARRAY;
}
}
/**
* base64文件流转文件 并入盘保存 简单版
* base64转文件保存到指定位置
* @param base64
* @param Aijie
* @param savePath
*/
public static File base64ToFile(String base64,String savePath,String fileName) {
File file = null;
//创建文件目录
String filePath = savePath;
File dir = new File(filePath);
if (!dir.exists() && !dir.isDirectory()) {
dir.mkdirs();
}
BufferedOutputStream bos = null;
java.io.FileOutputStream fos = null;
try {
byte[] bytes = Base64.getDecoder().decode(base64);
file=new File(filePath + fileName);
fos = new java.io.FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(bytes);
} catch (Exception e) {
e.printStackTrace();
System.out.println("base64转换文件时报错"+e.getMessage());
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return file;
}
}