同步代码

This commit is contained in:
lxj
2025-08-04 19:50:46 +08:00
parent 1d474d735e
commit 1f4e168b56
12 changed files with 329 additions and 35 deletions

View File

@@ -0,0 +1,70 @@
package org.dromara.common.core.enums;
/**
* 常用文件的文件头如下:(以前六位为准)
* JPEG (jpg)文件头FFD8FF
* PNG (png)文件头89504E47
* GIF (gif)文件头47494638
* TIFF (tif)文件头49492A00
* Windows Bitmap (bmp)文件头424D
* CAD (dwg)文件头41433130
* Adobe Photoshop (psd)文件头38425053
* Rich Text Format (rtf)文件头7B5C727466
* XML (xml)文件头3C3F786D6C
* HTML (html)文件头68746D6C3E
* Email [thorough only] (eml)文件头44656C69766572792D646174653A
* Outlook Express (dbx)文件头CFAD12FEC5FD746F
* Outlook (pst)文件头2142444E
* MS Word/Excel (xls.or.doc)文件头D0CF11E0
* MS Access (mdb)文件头5374616E64617264204A
* WordPerfect (wpd)文件头FF575043
* Postscript (eps.or.ps)文件头252150532D41646F6265
* Adobe Acrobat (pdf)文件头255044462D312E
* Quicken (qdf)文件头AC9EBD8F
* Windows Password (pwl)文件头E3828596
* ZIP Archive (zip)文件头504B0304
* RAR Archive (rar)文件头52617221
* Wave (wav)文件头57415645
* AVI (avi)文件头41564920
* Real Audio (ram)文件头2E7261FD
* Real Media (rm)文件头2E524D46
* MPEG (mpg)文件头000001BA
* MPEG (mpg)文件头000001B3
* Quicktime (mov)文件头6D6F6F76
* Windows Media (asf)文件头3026B2758E66CF11
* MIDI (mid)文件头4D546864
*/
public enum ImageType {
JPEG("jpg", "FFD8FF"),
PNG("png","89504E47"),
Windows_Bitmap("bmp","424D"),
GIF("gif","47494638"),
TIFF("tif","49492A00"),
CAD("dwg","41433130"),
Adobe_Photoshop("psd","38425053"),
XML("xml","3C3F786D6C"),
HTML("html","68746D6C3E"),
Adobe_Acrobat("pdf","255044462D312E"),
ZIP_Archive("zip","504B0304"),
RAR_Archive("rar","52617221"),
Wave("wav","57415645"),
AVI("avi","41564920");
private final String suffix;
private final String headCode;
ImageType(String suffix, String headCode) {
this.suffix = suffix;
this.headCode = headCode;
}
public String getSuffix() {
return suffix;
}
public String getHeadCode() {
return headCode;
}
}

View File

@@ -0,0 +1,147 @@
package org.dromara.common.core.utils;
import cn.hutool.core.io.IoUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.enums.ImageType;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;
/**
* [base64 加密解密工具类]
*
* @author : [lxj]
* @version : [v1.0]
* @createTime : [2021/4/27 12:54]
*/
@Slf4j
public class Base64Utils {
public Base64Utils(){}
/**
* 文件路径转base64
* @param path 文件路径
* @return 如果成功返回base64 字符串否则返回null
*/
public static String file2Base64(String path){
File f = new File(path);
if(f.exists()){
return file2Base64(f);
}
return null;
}
/**
* 文件转base64
* @param filePath 文件对象
* @return 如果成功返回base64 字符串否则返回null
*/
public static String file2Base64(File filePath){
return file2Base64(filePath.toPath());
}
/**
* 文件转base64
* @param p Path 对象
* @return 如果成功返回base64 字符串否则返回null
*/
public static String file2Base64(Path p) {
try {
byte[] b = Files.readAllBytes(p);
return byte2Base64(b);
} catch (IOException e) {
log.error("文件转base64失败, msg:" + e.getMessage());
return null;
}
}
/**
* 输入流转base64
* @param inputStream 输入流
* @return 如果成功返回base64 字符串否则返回null
*/
public static String stream2Base64(InputStream inputStream){
try {
byte [] b = IoUtil.readBytes(inputStream);
return byte2Base64(b);
} catch (Exception e) {
log.error("输入流转base64失败, msg:" + e.getMessage());
return null;
}
}
/**
* 字节数组转base64
* @param b 字节数组
* @return
*/
public static String byte2Base64(byte [] b){
assert b != null && b.length > 0;
return Base64.getEncoder().encodeToString(b);
}
/**
* 通过文件的base计算文件的格式
* @param base64 文件的base64
* @return
*/
public static String getType(String base64){
byte[] b = Base64.getDecoder().decode(base64);
return getType(b);
}
public static String getType(byte [] b){
try {
String xxx = bytesToHexString(b);
assert xxx != null && !xxx.isEmpty();
ImageType[] types = ImageType.values();
String suffix = null;
for (ImageType type: types) {
if(xxx.toUpperCase().startsWith(type.getHeadCode())){
suffix = type.getSuffix();
break;
}
}
return suffix;
}catch (Exception e) {
return null;
}
}
/**
* 判断文件格式 取前6个字符来进行判断
* @param src 文件字节数组
* @return 返回文件字节数组前6位编码
*/
public static String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder();
int pifNum = 10;
if (src == null || src.length <= pifNum) {
return null;
}
for (int i = 0; i < pifNum; i ++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
public static String handleBase64Header(String webBase64Code){
String [] s = webBase64Code.split("base64,");
if(s.length == 2){
return s[1];
}
return webBase64Code;
}
}