Spring boot将图片转成base64,使用sun.misc.BASE64Decoder转换图片

首页 / 新闻资讯 / 正文

本来项目要求的是后台给前端返回文件的地址,前端可以读取文件,图片或者pdf文件都能读取到,pdf根据浏览器会有显示和下载两种情况,doc等其他类型需要联网使用微软公司的接口。但是这样就暴露了服务器存放文件的地址,所以更改为把图片大小限制后转成base64编码持久化保存。

pom文件直接导入:

<!-- 图片转base64 -->         <!-- https://mvnrepository.com/artifact/com.slzx.third/sun.misc.BASE64Decoder --> 		<dependency> 		    <groupId>com.slzx.third</groupId> 		    <artifactId>sun.misc.BASE64Decoder</artifactId> 		    <version>1.0</version> 		</dependency>

就是文件下载不下来,就直接把jar包下载下来放到本地mvn库中
路径不变
进cmd后输入

mvn install:install-file -DgroupId=com.slzx.third -DartifactId=sun.misc.BASE64Decoder -Dversion=1.0 -Dpackaging=jar -Dfile=D:\software\sunmiscbase64decoder\sun.misc.BASE64Decoder.jar

@param imgFilePath 待处理图片的地址
@return 注意这里只返回图片的base64编码,没有文件类型》》data:image/png;base64,添加类型信息后可以在img标签中显示

package com.psbc.pfpj.utils;  import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;  import Decoder.BASE64Decoder; import Decoder.BASE64Encoder;  public class ImgTypeConvert { 	 	/** 	 * 将图片转换成Base64编码 	 *  	 * @param imgFilePath  待处理图片文件的地址 	 * @return 注意这里只返回图片的base64编码,没有文件类型》》data:image/png;base64,添加类型信息后可以在img标签中显示 	 */ 	public static String getImgStr(String imgFilePath) { 		// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 		File file=new File(imgFilePath); 		InputStream in = null; 		byte[] data = null; 		// 读取图片字节数组 		try { 			in = new FileInputStream(file); 			data = new byte[in.available()]; 			in.read(data); 			in.close(); 			if(data!=null&&data.length>0){ 				//删除图片 //				file.delete(); 			} 		} catch (IOException e) { 			e.printStackTrace(); 		} 		 		BASE64Encoder encoder = new BASE64Encoder(); 		return encoder.encode(data); 	} 	          public static void main(String[] args) {     	String base64 = ImgTypeConvert.getImgStr("C:\\Users\\28054\\Pictures\\QQ浏览器截图\\QQ浏览器截图20210112094524.png"); 		System.out.println(base64); 		System.out.println(ImgTypeConvert.GenerateImage(base64, "D:\\a.jpg")); 		 	}          /** 	 * @Description: 将base64编码字符串转换为图片 	 * @Author:  	 * @CreateTime:  	 * @param imgStr base64编码字符串 	 * @param path 图片路径-文件名自己定义 	 * @return 	*/      public static boolean GenerateImage(String imgStr,String imgFilePath)       {   //对字节数组字符串进行Base64解码并生成图片           if (imgStr == null) //图像数据为空               return false;           BASE64Decoder decoder = new BASE64Decoder();           try            {               //Base64解码               byte[] b = decoder.decodeBuffer(imgStr);               for(int i=0;i<b.length;++i)               {                   if(b[i]<0)                   {//调整异常数据                       b[i]+=256;                   }               }               //生成图片               OutputStream out = new FileOutputStream(imgFilePath);                   out.write(b);               out.flush();               out.close();               return true;           }            catch (Exception e)            {               return false;           }       }               }