一、前情
本来项目要求的是后台给前端返回文件的地址,前端可以读取文件,图片或者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浏览器截图20220112094524.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;
}
}
}
声明:本站所有文章,如无特殊说明或标注,均为网络收集发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。