本来项目要求的是后台给前端返回文件的地址,前端可以读取文件,图片或者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; } } }