我是靠谱客的博主 发嗲火车,这篇文章主要介绍Base64编码 含换行符 BASE64Encoder Base64 commons-codec Java读取照片文件转换为Base64编码 Base64转文件,现在分享给大家,希望可以做个参考。
Base64编码
jdk7
复制代码
1
2
3
4//编码(bug,jdk7的sun.misc.BASE64Encoder每76会有一换行 会导致http时Json出错) BASE64Encoder base64En = new BASE64Encoder(); String imgBase64 = base64En.encode(buffer2); System.out.println("编码成功,Size:" + imgBase64.length());
jdk8
复制代码
1
2
3//编码(jdk8版的Base64没有换行) String imgBase64 = Base64.getEncoder().encodeToString(buffer2); System.out.println("编码成功,Size:" + imgBase64.length());
commons-codec
复制代码
1
2
3
4
5
6<!--bug,jdk7的sun.misc.BASE64Encoder每76会有一换行 会导致http时Json出错--> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency>
复制代码
1org.apache.commons.codec.binary.Base64
示例:Java读取照片文件转换为Base64编码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44//###################################################################// //照片 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
复制代码
1
2
3
4
5
6
7
8
9
10
11//解码 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);
完整示例
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28//解码 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
复制代码
1
2
3//Base64解码 byte[] bufferOut = Base64.getDecoder().decode(base64); //System.out.println("解码成功,Size:" + bufferOut.length);
完整示例
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49//##############################################################################// //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编码内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复