我是靠谱客的博主 发嗲火车,最近开发中收集的这篇文章主要介绍Base64编码 含换行符 BASE64Encoder Base64 commons-codec Java读取照片文件转换为Base64编码 Base64转文件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Base64编码

jdk7

//编码(bug,jdk7的sun.misc.BASE64Encoder每76会有一换行 会导致http时Json出错)
BASE64Encoder base64En = new BASE64Encoder();
String imgBase64 = base64En.encode(buffer2);
System.out.println("编码成功,Size:" + imgBase64.length());

jdk8

//编码(jdk8版的Base64没有换行)
String imgBase64 = Base64.getEncoder().encodeToString(buffer2);
System.out.println("编码成功,Size:" + imgBase64.length());

commons-codec

<!--bug,jdk7的sun.misc.BASE64Encoder每76会有一换行 会导致http时Json出错-->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>
org.apache.commons.codec.binary.Base64

示例:Java读取照片文件转换为Base64编码

//###################################################################//
//照片
String filePath = uploadDir + shjl.getPic();
//判断文件是否存在
File file = new File(filePath);
if(!file.exists()){
	return ResultUtil.fail("文件不存在," + filePath);
}
//读文件
BufferedInputStream bufferedInput = null;
byte[] buffer = new byte[1024*1024];
int bytesReadTotal = 0;
try {
	//创建BufferedInputStream 对象
	bufferedInput = new BufferedInputStream(new FileInputStream(filePath));
	int bytesRead = 0;
	//从文件中按字节读取内容,到文件尾部时read方法将返回-1
	while ((bytesRead = bufferedInput.read(buffer)) != -1) {
		bytesReadTotal += bytesRead;
	}
} catch (Exception ex) {
	ex.printStackTrace();
} finally {
	//关闭 BufferedInputStream
	try {
		if (bufferedInput != null){
			bufferedInput.close();
		}
	} catch (IOException ex) {
		ex.printStackTrace();
	}
}
System.out.println("读文件成功,Size:" + bytesReadTotal);
//数组复制(BASE64编码 不能自动控制长度)
byte[] buffer2 = new byte[bytesReadTotal];
System.arraycopy(buffer, 0, buffer2, 0, bytesReadTotal);
/*//编码(bug,jdk7的sun.misc.BASE64Encoder每76会有一换行 会导致http时Json出错)
BASE64Encoder base64En = new BASE64Encoder();
String imgBase64 = base64En.encode(buffer2);
System.out.println("编码成功,Size:" + imgBase64.length());*/
//编码(jdk8版的Base64没有换行)
String imgBase64 = Base64.getEncoder().encodeToString(buffer2);
System.out.println("编码成功,Size:" + imgBase64.length());
//###################################################################//

Base64转文件

jdk7

//解码
BASE64Decoder base64De = new BASE64Decoder();
byte[] bufferOut = new byte[1024*1024];
try {
	bufferOut = base64De.decodeBuffer(fileStr);
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
//System.out.println("解码成功,Size:" + bufferOut.length);

完整示例

//解码
BASE64Decoder base64De = new BASE64Decoder();
byte[] bufferOut = new byte[1024*1024];
try {
	bufferOut = base64De.decodeBuffer(fileStr);
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
//System.out.println("解码成功,Size:" + bufferOut.length);

//写文件
FileOutputStream out = null;
try {
	out = new FileOutputStream(new File(filePath));
	out.write(bufferOut, 0, bufferOut.length);
} catch (Exception  e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} finally {
	try {
		out.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

 jdk8

//Base64解码
byte[] bufferOut = Base64.getDecoder().decode(base64);
//System.out.println("解码成功,Size:" + bufferOut.length);

 完整示例

//##############################################################################//
//1.获取文件路径
//获取文件的后缀名
String suffixName = "." + fileType;
//获取当前的年月(作为文件夹名)
SimpleDateFormat formater_YM = new SimpleDateFormat("yyyyMM");
String strFolderPath = formater_YM.format(new Date());
//中间路径
String midPath = null;
if(!StringUtils.isEmpty(pathFlag)){
	midPath = pathFlag + "/" + strFolderPath + "/";
}else{
	midPath = strFolderPath + "/";
}
//获取“文件上传路径”
strFolderPath = uploadDir + "/" + midPath;
//判断文件夹是否存在,不存在则创建
File dir = new File(strFolderPath);
if(!dir.exists()) {
	dir.mkdirs();
}
//获取当前的时间(到毫秒,作为保存文件的名称)
SimpleDateFormat formater_time = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String strSaveFileName = nameFlag + "_" + formater_time.format(new Date()) + suffixName;
//获取尾部路径(返回值用)
//String tailPath = midPath + strSaveFileName;
String tailPath = "/" + midPath + strSaveFileName;//兼容老系统
//获取全路径
String strFileFullPath = strFolderPath + strSaveFileName;
//##############################################################################//
//2.Base64解码
byte[] bufferOut = Base64.getDecoder().decode(base64);
//System.out.println("解码成功,Size:" + bufferOut.length);
//3.写文件
FileOutputStream out = null;
try {
	out = new FileOutputStream(new File(strFileFullPath));
	out.write(bufferOut, 0, bufferOut.length);
} catch (Exception  e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} finally {
	try {
		out.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

参考:

​​​​​​Base64编码出现换行符 - 百度文库
使用java8的java.util.Base64报“java.lang.IllegalArgumentException: Illegal base64 character d”的问题_kevin_mails的博客-CSDN博客
 

最后

以上就是发嗲火车为你收集整理的Base64编码 含换行符 BASE64Encoder Base64 commons-codec Java读取照片文件转换为Base64编码 Base64转文件的全部内容,希望文章能够帮你解决Base64编码 含换行符 BASE64Encoder Base64 commons-codec Java读取照片文件转换为Base64编码 Base64转文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(205)

评论列表共有 0 条评论

立即
投稿
返回
顶部