我是靠谱客的博主 发嗲火车,最近开发中收集的这篇文章主要介绍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转文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复